问题描述
|
我有一个将
Task
对象(自定义类)存储在NSMutableArray
中的应用。 Task
类符合NSCoding
和NScopying
协议,并且我还实现了encodeWithCoder
和initWithCoder
方法。
当用户向NSMutableArray
list
添加新任务时,我使用NSKeyedArchiver
保存数组。 list
构成a11ѭ。
数据正在保存,当我退出应用程序并重新输入时,数据仍然存在。当我使用另一个应用程序一段时间后返回时,数据仍然存在。但是,当我“杀死”多任务任务中的应用程序管理或重新启动设备时,数据将消失。以下是一些重要的代码段:
#define kFilename @\"epapsTasksFile\"
。
- (Nsstring *)dataFilePath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
Nsstring *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:kFilename];
}
- (void)viewDidLoad {
Nsstring *filePath = [self dataFilePath];
if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
self.list = [[NSKeyedUnarchiver unarchiveObjectWithFile:kFilename] retain];
}
else {
self.list = [NSMutableArray arrayWithCapacity:1];
}
...
}
- (void)applicationWillResignActive:(NSNotification *)notification {
NSMutableArray *updatedList = [[NSMutableArray alloc] initWithArray:self.list];
[NSKeyedArchiver archiveRootObject:updatedList toFile:kFilename];
}
为什么应用被“杀死”或重新启动设备后,我的应用为什么不保存数据?另外,可能有趣的是,当我重新启动iPhone模拟器时,数据保持在原位。
解决方法
您需要保存数据
(
[NSKeyedArchiver archiveRootObject:updatedList toFile:kFilename];
也可以在“ 15”委托方法中保存它,以在终止时保存它。
编辑:
在IOS4.0及更高版本中未保证“ 15”。
最好是检查archiveRootObject:toFile:
的返回状态,并查看数据是否正确存储。如您所知,可能是文件路径错误的情况。