在 iCloud 环境中检测应用程序 (IOS/OSX) 的首次运行

Posted

技术标签:

【中文标题】在 iCloud 环境中检测应用程序 (IOS/OSX) 的首次运行【英文标题】:Detecting the first run of an app (IOS/OSX) in an iCloud environment 【发布时间】:2012-12-14 16:10:54 【问题描述】:

我在这里看到了几个关于如何检测“独立”应用程序首次运行的答案。但是进入共享(iCloud)环境,有没有办法检测一个应用程序有:

    从未在任何地方运行过

    已在此设备上运行

    已在另一台设备上运行

这是一个与 CoreData 相关的问题。如果应用程序是基于文档的 - 我可以检查文档是否存在..

我目前正在使用此代码将一些项目加载到实体中 - 只是第一次。随后,目前,用户可以编辑这些项目。但是,下次在新设备上运行该应用时,所有更改都将丢失。

NSString *bundleVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];

    appFirstStartOfVersionKey = [NSString stringWithFormat:@"first_start_%@", bundleVersion];

    NSNumber *alreadyStartedOnVersion = [[NSUserDefaults standardUserDefaults] objectForKey:appFirstStartOfVersionKey];
    if(!alreadyStartedOnVersion || [alreadyStartedOnVersion boolValue] == NO) 
        [self firstStartCode];
        [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:YES] forKey:appFirstStartOfVersionKey];
    

-(void) firstStartCode 

    NSLog(@"First Time building categories");
    Category *category = (Category *)[NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:self.coreDataController.mainThreadContext];
    category.name = @"Web Sites";

    category = (Category *)[NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:self.coreDataController.mainThreadContext];
    category.name = @"E-mail";

    category = (Category *)[NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:self.coreDataController.mainThreadContext];
    category.name = @"Social Networks";

【问题讨论】:

【参考方案1】:

您可以在 iCloud 中检查文档是否存在。唯一的问题是 iCloud 会异步执行它想要的操作,因此无法保证您在什么时候能够真正看到该文档。

【讨论】:

当您使用Core data,并且应用程序不是基于文档的,只有事务,它们的编号相当随机。 实际上,您的回答让我思考,虽然我没有基于文档的应用程序,但设置云用户默认值很容易。因此,我会将您的解决方案标记为正确。谢谢

以上是关于在 iCloud 环境中检测应用程序 (IOS/OSX) 的首次运行的主要内容,如果未能解决你的问题,请参考以下文章

检测 OS X 上的 iCloud 可用性变化

仅使用键值存储检测 iCloud 帐户可用性/更改?

在重新加载文档之前,如何在 OS X 上的 iCloud 中检测对 Core Data 文档的更改?

如何检测 iCloud 钥匙串的更改

正确处理在您的应用程序的另一个实例中使用 iCloud 删除 UIDocument

手机处于飞行模式时如何检测 iCloud 用户?