在我为学校项目创建的 iOS 应用程序中,我无法保存存储在 NSMutableArray 中的数据。该数组在应用程序委托文件中创建,然后在其他各种视图控制器文件中为其创建委托。存储在数组中的数据由由 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 个 NSString、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"];
}
但这似乎对我不起作用。任何帮助将不胜感激。我觉得这应该是一件相当容易的事情,但我似乎无法理解。