2013-10-21 21 views
0

在写入归档并读取自定义类的NSDate对象时,它不是Objective-C对象: 我是否需要将它切换为字符串,还是应该能够将其直接存储为类中的对象。NSDate <不是Objective-C对象>

anArray = [[NSMutableArray alloc] initWithObjects:nil]; 
self.title = @"Homework APP"; 
NSString *filePath = [self dataFilePath]; 
NSDate *datetoday=[NSDate date]; 
//Create an object for archiving 
homework *myHomework = [[homework alloc] init]; 
myHomework.classname = @"Physics"; 
myHomework.title = @"HW1"; 
myHomework.description = @"Test"; 
myHomework.duedate = datetoday; 
myHomework.notify = TRUE; 
homework *myHomework2 = [[homework alloc] init]; 
myHomework2.classname = @"Computer"; 
myHomework2.title = @"HW2"; 
myHomework2.description = @"Test"; 
myHomework2.duedate = datetoday; 
myHomework2.notify = FALSE; 

NSMutableArray *myHomeworksArray = [[NSMutableArray alloc] initWithObjects:myHomework, myHomework2, nil]; 
anArray = myHomeworksArray; 
//Archive my object 
[NSKeyedArchiver archiveRootObject:myHomeworksArray toFile:filePath]; 

//Unarchive my object to check 
homework *archivedHomework = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; 

这是编码器/解码器:

- (void)encodeWithCoder:(NSCoder *)aCoder 
{ 
    [aCoder encodeObject:self.classname forKey:@"classname"]; 
    [aCoder encodeObject:self.title forKey:@"title"]; 
    [aCoder encodeObject:self.description forKey:@"description"]; 
    [aCoder encodeObject:self.duedate forKey:@"duedate"]; 
    [aCoder encodeBool:self.notify forKey:@"notify"]; 

} 

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super init]; //call class 
    if (self) { //makes sure it exists 
    self.classname = [aDecoder decodeObjectForKey:@"classname"]; 
    self.title = [aDecoder decodeObjectForKey:@"title"]; 
    self.description = [aDecoder decodeObjectForKey:@"description"]; 
    self.duedate = [aDecoder decodeObjectForKey:@"duedate"]; 
    self.notify = [aDecoder decodeBoolForKey:@"notify"]; 
    } 

    return self; 

} 
+4

只是一个评论:你应该用第一个字母命名你的班级,否则它真的很痛;( – Francescu

+1

你应该使用调试器来查看问题出在哪里...... –

+1

你应该实际列出错误信息智者。 –

回答

2

你归档对象的数组,但你想解除封存的只有一个“功课”对象:

homework *archivedHomework = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; 
相关问题