gpt4 book ai didi

iOS 自动保存对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:11:46 25 4
gpt4 key购买 nike

在我的应用程序中,我有 Singleton 对象,它应该在应用程序启动时保存其状态。所以我需要以某种方式保存它。

我只看到两个选项:1) 在应用程序终止时保存它(加上,也许,进入后台); 2) 每次更改任何属性时保存它。

第一个选项看起来很糟糕,因为应用程序可能会被终止,例如,由于某些错误、内存限制或设备关机(电池电量不足)。所以我预计状态不会被保存。

第二个选项需要关于每个更改的手动通知,或者 KVO + 观察每个属性。

看来我在这里做错了什么。也许,您可以给我一些建议,或者有一些众所周知的模式(我尝试用谷歌搜索,但没有发现任何特别的东西)。

更新:

是的,有 NSUserDefaults,但为了提高它的可用性(不只是键值)我会写包装器方法,所以我会以同样的问题结束(手册行编码)。

更新 2:

CoreData 对我来说也是一个糟糕的选择:只存储一个对象 + 插入那里还需要更多代码行。

更新 3:

这不是关于“如何保存”的问题。这是关于“如何自动调用此保存(或使用更少的代码)”。所以在 NSUserDefault 方式中,我们需要手动将每个属性实现为包装器。在 NSCoding 中 - 从每个属性调用 save 或发布通知(从一个地方捕获和保存)。

最佳答案

在 iOS 中保存用户状态的最简单方法是通过 NSUserDefaults .

这是一个跟踪对您的单例所做的所有更改的示例:

@interface MySingleton : NSObject
{
}

+ (MySingleton *)sharedSingleton;

@property (copy) NSString *userName;//the variable to track
@end

@implementation MySingleton
@synthesize userName;
+ (MySingleton *)sharedSingleton
{
static MySingleton *sharedSingleton;

@synchronized(self)
{
if (!sharedSingleton)
sharedSingleton = [[MySingleton alloc] init];

return sharedSingleton;
}
}

- (void)setUserName:(NSString*)userName
{
//update the variable
self.userName = userName;
//saves the new value to NSUserDefaults
[[NSUserDefaults standardUserDefaults] setObject:userName forKey:@"userName"];
//forces instantaneous synchronization, not needed, would be updated after a periodic interval anyways
[[NSUserDefaults standardUserDefaults] synchronize];
}
@end

您可以选择实现NSCoding 协议(protocol)并将整个类保存到NSUserDefaults,看看this question .

关于iOS 自动保存对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18207800/

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