如何在iOS中保存一个充满自定义类的数组?
在我为学校项目创建的iOS应用程序中,我无法保存存储在NSMutableArray中的数据。该数组在app委托文件中创建,然后在各种其他视图控制器文件中创建它的委托。存储在数组中的数据由NSStrings和NSNumbers组成的自定义类组成。
我已经在这个网站上阅读并关注了大约一个星期的例子,但我不能为我的生活弄明白。我也研究了核心数据,但是我无法弄清楚如何在没有完全重新开始的情况下实现它,并且不幸的是我很紧张。
我尝试过的事情:
在WillTerminate方法中存档。 (activityArray是我的数组)
- (void)applicationWillTerminate:(UIApplication *)application {
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* arrayFile = [documentsPath stringByAppendingPathComponent:@"arrayFile"];
[NSKeyedArchiver archiveRootObject:activityArray toFile:arrayFile];
[activityArray release];
然后在AppDelegate文件的didFinishLaunchingWithOptions方法中取消归档
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *arrayFile = [documentsPath stringByAppendingPathComponent:@"arrayFile"];
if ([fileManager fileExistsAtPath:arrayFile]) {
NSLog(@"yes");
activityArray = [NSMutableArray arrayWithContentsOfFile:arrayFile];
} else {
activityArray = [[NSMutableArray alloc] init];
}
根据其他问题的建议,我在自定义类中执行了以下操作(此类有2个NSStrings,activityName和activityDescription)。
- initWithCoder:(NSCoder *)aCoder {
self = [super init];
activityName = [[aCoder decodeObjectForKey:@"activityName"] retain];
activityDescription = [[aCoder decodeObjectForKey:@"activityDescription"] retain];
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:activityName forKey:@"activityName"];
[aCoder encodeObject:activityDescription forKey:@"activityDescription"];
}
但这似乎都不适合我。感谢任何帮助。我觉得这应该是一件相当容易的事,但我似乎无法得到它。
没有找到相关结果
已邀请:
3 个回复
凡夕
弛保矮瘦敖
然后,您可以检索保存对象,如下所示:
但是,为了实现这一点,您必须为所提到的任何自定义对象实现initWithCoder和encodeWithCoder方法。
联课
。您应该考虑将代码放在
中。 至于在归档后释放阵列,当用户离开应用程序时它会失败(它将被暂停)然后又回来(应用程序刚刚重新激活,而不是重新启动)。在这种情况下,您释放阵列的事实将导致您的应用程序崩溃。