在应用程序杀死或使用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:
的返回状态,并查看数据是否正确存储。如您所知,可能是文件路径错误的情况。