gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:44:47 25 4
gpt4 key购买 nike

我的应用正在从我们的网络服务中提取 JSON 数据。到目前为止,在所有情况下,信息都将保留在内存中或只是即时刷新,除了 API 中使用的登录 token 外,无需在本地保留任何内容。通过我们正在添加的一项新功能,我们将采用一组位置,最多 26 个,具有经度、纬度、半径和名称。

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

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

最佳答案

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

使用 NSKeyedArchiver/NSKeyedUnarchiver 保存到 plist。从委托(delegate)的 didFinishLaunchingWithOptions 中读取您的数据,并监听 UIApplicationWillResignActiveNotification 以保存它。

NSUserDefaults 是一个 plist,具有旨在存储用户首选项的功能。它经常被用来代替常规的 plist 来保存几行代码,我认为这是一个坏主意,因为你会得到与你的任务无关的额外复杂性。

如果您希望保护登录以防止有人窃取设备并执行取证,请使用钥匙串(keychain)。您可能想使用包装器并阅读一些文章,如果您有兴趣,请发表评论。

如果您需要更多功能,请参阅 Best way to store data on iphone但现在似乎并非如此。

一些代码可以帮助您入门...注册以在应用程序退出时调用保存:

[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(saveMyData)
name:UIApplicationWillResignActiveNotification
object:nil];

在图形/字典/任何你想归档的对象上实现 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;
}

关于objective-c - 在 iOS 中存储对象供以后使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6972656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com