0

「スタンドアロン」アプリの最初の実行を検出する方法について、ここでいくつかの回答を見てきました。しかし、共有 (iCloud) 環境に移行する場合、アプリに次のものがあることを検出する方法はありますか?

  1. どこでも実行されたことはありません

  2. このデバイスで実行されました

  3. 別のデバイスで実行された

これは 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";
4

1 に答える 1

2

iCloud にドキュメントが存在するかどうかを確認できます。唯一の問題は、iCloud が必要なことを非同期に行うことであり、そのため、その文書を実際にどの時点で見ることができるかについての保証はありません。

于 2012-12-14T16:14:03.417 に答える