I created a CoreData application using the Cocoa Touch Template. I modified the included .xcdatamodel file to have an attribute called 'Date' with datatype of 'Date' and other string attributes.
I use following codes to save data for the 'Date' field:
NSDateFormatter *dateFormatter=[[[NSDateFormatter alloc] init] autorelease] ;
[dateFormatter setDateFormat:@"YYYY-MM-DD"];
NSDate *date= [[[NSDate alloc] init] autorelease];
date=[dateFormatter dateFromString:@"2010-03-01"];
[newManagedObject setValue:date forKey:@"Date"];
NSError *error;
if (![context save:&error]) {
// Handle the error...
}
To show the data in TableView I write following code in cellForRowAtIndexPath: method:
// Configure the cell.
NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:indexPath];
//Formatting Date Portion of Name
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"DD MMM YYYY"];
NSString *fName= [NSString stringWithFormat: @"%@: %@", [dateFormatter stringFromDate:[managedObject valueForKey:@"Date"]],[[managedObject valueForKey:@"Name"] description]];
I am really surprised that cell in TableView shows - 01 Jan 1970: Test
I also tried to use NSDateComponents instead of NSDateFormatter so I changed the code for saving date with:
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:1];
[comps setMonth:3];
[comps setYear:2010];
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:comps];
[comps release];
This time surprisingly cell displayed - 60 Mar 2010.
So I get 2 different but wrong values, but am unable to show the correct value which should be - 01 Mar 2010. I am really at loss of ideas on what could be going wrong here.
Can anybody suggest me where can I begin looking? Is there anything wrong with my code? Are there some well recognised issues with saving dates using CoreData?
Looking forward to your replies. Thanks in advance.