微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在应用程序杀死或使用NSKeyedArchiver重新启动后,NSMutableArray消失

如何解决在应用程序杀死或使用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 举报,一经查实,本站将立刻删除。