接近应用程序版本:2个快速问题

当我接近释放我的应用程序,我试图确保我使用稳定的代码来检查应用程序是否已经启动之前(为了执行一些第一次设置)。 这(显然是没有考虑到应用程序版本和更新没有装饰的方法)几乎坚实的方式来确定应用程序是否已经启动?

在我的应用程序委托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]; } 

我的第二个问题基本上是,我可以假设,当我释放一个应用程序更新,用户的文件目录为我的特定应用程序的沙箱将留下不清楚? 应用程序更新是否简单地添加到目录,而不是擦干净,重新安装? 即使在更新应用程序时,我也需要用户的文件(很明显),但是我不想做出错误的假设,并且每次发布更新时都会丢失数据。

谢谢!

是的,这是NSUserDefaults的一个很好的使用。

用户数据通过更新被保留。

只要确保将应用程序随附的数据和运行期间生成的数据保存在不同的分箱中即可。 所以,如果你必须改变前者(通过应用程序更新),后者保持不变。 例如,不要把它们放在同一个SQLite表中。

我知道你已经接受了一个答案,但我只是想谈谈这个问题。 我检查应用程序是否第一次启动的方式是这样的:

 - (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]; } } 

我之所以要发帖,是因为当我检查这是用户的首次发布时,我也保存了他们首次发布的date。 没有额外的代码,我想为什么不保存这个第一次启动date。 我的应用程序中完全不使用这些信息,但是我想也许将来我可能会这样做。 在未来,我正在考虑添加应用程序购买,我会免费给我的初始用户的东西; 所以这可以让我为未来做好准备,并同时实现我的目标。

为了完整NSUserDefaultsNSUserDefaults在应用程序更新之间保持NSUserDefaults ,只要确保不要将键更改为任何对象,否则将不会find该对象。

另外一件好事是添加行[defaults synchronize]; – 从字面上使应用程序保存该数据。 该应用程序定期自动保存数据,但我喜欢安全,并知道我的东西被保存。

让我知道如果你有任何其他问题