如何解决在应用程序杀死或使用NSKeyedArchiver重新启动后,NSMutableArray消失
| 我有一个将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:
的返回状态,并查看数据是否正确存储。如您所知,可能是文件路径错误的情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。