当我接近发布我的应用程序时,我正在尝试确保我使用稳定代码来检查应用程序是否已经启动(为了执行首次设置)。这(显然是一种没有考虑到应用程序版本和更新的简单方法)几乎是确定应用程序是否已经启动的坚实方法吗?
在我的app委托didFinishLaunchingWithOptions方法中,我每次执行以下操作:
NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
if(![defaults objectForKey:@"not_first_launch"])
{
NSLog(@"This is the first time the app has been launched.\nPerforming first-time setup procedures...");
[self runFirstTimeSetup];
}
我的第二个问题基本上是,我可以假设当我发布应用更新时,我的特定应用程序的沙箱的用户文档目录将不会被删除吗?应用程序更新是否只是添加到目录中,而不是擦除它并重新安装?即使我更新应用程序,我也需要用户的文件(非常明显),但我不想做出错误的假设,并且每次发布更新时都会让用户丢失数据。
谢谢!
答案 0 :(得分:2)
是的,这很好地利用了NSUserDefaults。
通过更新保留用户数据。
只需确保将应用程序附带的数据和运行期间生成的数据保存在不同的分档中。因此,如果您必须更改前者(通过应用程序更新),后者保持不变。例如,不要将它们放在同一个SQLite表中。
答案 1 :(得分:1)
我知道你已经接受了答案,但我只想谈谈这个问题。我检查应用程序是否第一次启动的方式是这样的:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...normal code...
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults objectForKey:@"kFirstUse"]) {
[defaults setObject:[NSDate date] forKey:@"kFirstUse"];
[defaults synchronize];
}
}
我想发布的原因是因为当我检查这是否是用户的第一次发布时,我也保存了他们首次发布的日期。因为没有额外的代码,我想为什么不保存这个第一个发布日期。我在我的应用程序中根本不使用该信息,但我想也许将来我可能。在将来,我正在考虑添加App Purchase,我会把这些东西免费提供给我的初始用户;所以这让我为未来做好准备,同时实现我的目标。
为了完整起见,NSUserDefaults
在应用更新之间保持不变,只需确保不要将密钥更改为任何对象,否则将无法找到该对象。
要添加的另一个好处是行[defaults synchronize];
- 从字面上看,应用程序会保存该数据。该应用程序会定期自动保存数据,但我喜欢安全并知道我的东西已保存。
如果您有任何其他问题,请告诉我