随着我越来越接近发布我的应用程序,我正在尝试确保我使用稳定的代码来检查该应用程序以前是否已经启动过(以便执行一些首次设置)。这(显然是一种简单的方法,不考虑应用程序的版本和更新)是确定应用程序是否已经启动的可靠方法吗?
在我的应用委托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];
}
我的第二个问题基本上是,我能假设当我发布应用程序更新时,我的特定应用程序沙箱的用户文档目录不会被擦除吗?应用程序更新是否只是添加到目录中,而不是清除并重新安装?我需要用户的文件留下来,即使我更新应用程序(很明显),但我不想做出错误的假设,让用户在每次发布更新时丢失数据。
谢谢!
发布于 2011-12-03 04:42:11
是的,这是NSUserDefaults的一个很好的用法。
通过更新保留用户数据。
只需确保将应用程序附带的数据和运行期间生成的数据放在单独的回收站中即可。因此,如果您必须更改前者(通过应用程序更新),则后者保持不变。例如,不要将它们放在同一个SQLite表中。
发布于 2011-12-03 10:08:47
我知道你已经接受了答案,但我只是想谈谈这个问题。我检查应用程序是否是第一次启动的方法如下:
- (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];
这一行--从字面上看,它可以让应用程序保存数据。这个应用程序会定期自动保存数据,但我喜欢确保安全,知道我的数据是保存的。
如果您有任何其他问题,请告诉我
https://stackoverflow.com/questions/8362214
复制相似问题