我有一个应用程序在Task
内存储NSMutableArray
个对象(自定义类)。 Task
类符合NSCoding
和NSCopying
协议,我还实施了encodeWithCoder
和initWithCoder
方法。
当用户向NSMutableArray
list
添加新任务时,我使用NSKeyedArchiver
保存数组。 list
填充UITableView
。
正在保存数据,当我退出应用程序并重新输入时,数据仍然存在。当我暂时使用其他应用程序并返回时,数据仍然存在。但是,当我在多任务处理任务中“杀死”应用程序管理或重启设备时,数据就会消失。以下是一些重要的代码段:
#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模拟器时,数据仍然存在。
答案 0 :(得分:1)
您需要保存数据
([NSKeyedArchiver archiveRootObject:updatedList toFile:kFilename];
在applicationWillTerminate
委托方法中,以及在终止时保存它。
修改强>
applicationWillTerminate
在IOS4.0及更高版本中不受保护。
最好检查archiveRootObject:toFile:
的返回状态,看看数据是否存储正确。正如你所知,它可能是错误的文件路径。