在iOS中存储对象以供以后使用

Bil*_*ess 6 objective-c file-storage nsuserdefaults ios

我的应用程序从我们的Web服务中提取JSON数据.在所有直到现在的实例中,信息将保留在内存中或者只是动态刷新,除了API中使用的登录令牌之外,不需要保留本地任何内容.通过我们添加的新功能之一,我们将采用一组位置,最大26位,具有长,纬度,半径和名称.

我还需要为此数据添加1-2个字段以创建更大的对象.所以我的问题是,在iOS文件系统中存储此类数据的最佳方法是什么?目前我一直在使用NSUserDefaults,但对于大量数据而言,这似乎有点受限或不明智.也许不吧.

需要检索,更改或编辑此数据并重新保存.所有这一切仍然保留了拉动这26个物体中的任何一个的能力.提前感谢您的阅读和帮助.

Jan*_*ano 5

对于如此少量的数据(26项),我建议归档.

使用NSKeyedArchiver/ 保存到plist NSKeyedUnarchiver.从委托的didFinishLaunchingWithOptions中读取您的数据,并听取UIApplicationWillResignActiveNotification保存.

A NSUserDefaults是具有旨在存储用户偏好的功能的plist.它经常被用来代替普通的plist来保存几行代码,我认为这是一个坏主意,因为你获得了与你的任务无关的额外复杂性.

如果您希望保护登录免受窃取设备和执行取证的人使用钥匙串.您可能想要使用包装器并阅读一些文章,如果您感兴趣,请发表评论.

如果您寻找更多功能,请参阅在iphone上存储数据的最佳方式,但现在似乎并非如此.

一些代码可以帮助您入门...注册以保存应用程序辞职:

[[NSNotificationCenter defaultCenter]
        addObserver:self 
           selector:@selector(saveMyData) 
               name:UIApplicationWillResignActiveNotification 
             object:nil];
Run Code Online (Sandbox Code Playgroud)

在图形/字典的每个对象/您想要存档的任何内容上实现NSCoding:

- (void)encodeWithCoder:(NSCoder*)coder {
    [coder encodeObject:myIvar forKey:kmyIvar];
}

- (id)initWithCoder:(NSCoder*)coder {
    if((self = [super initWithCoder:coder])) {
        self.myIvar = [[coder decodeObjectForKey:kmyIvar] retain];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)