0

シミュレーターにいるかどうかに基づいて、iCloud の読み込みをトリガーするかどうかを今すぐ確認できます。実際のデバイスで実行しようとすると、黒い画面が表示され、「addPersistentStore」行がハングしているように見えます。「My Project Name」は、資格ファイルの名前であり、アプリの名前です。

どうしたの?

#if (TARGET_IPHONE_SIMULATOR)
        if (![psc addPersistentStoreWithType:NSSQLiteStoreType
                               configuration:nil
                                         URL:dbUrl
                                     options:nil
                                       error:&error]) {
            [NSException raise:@"Open failed" format:@"Reason: %@", [error localizedDescription]];
        }
#else
        NSFileManager *fm = [NSFileManager defaultManager];
        NSURL *ubContainer = [fm URLForUbiquityContainerIdentifier:nil];
        NSMutableDictionary *options = [NSMutableDictionary dictionary];
        [options setObject:@"My Project Name" forKey:NSPersistentStoreUbiquitousContentNameKey];
        [options setObject:ubContainer forKey:NSPersistentStoreUbiquitousContentURLKey];

        if (![psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:dbUrl options:options error:&error]) {
            [NSException raise:@"Open failed" format:@"%@", [error localizedDescription]];
        }
#endif
4

2 に答える 2

2

Apple は、iCloud を使用している場合は、これらすべての手順を別のスレッドで実行することをお勧めします。URLForUbiquityContainerIdentifierとの両方addPersistentStoreWithType:configuration:options:error:がネットワークに接続され、長時間ブロックされる可能性があります。2 番目の呼び出し (永続ストアの追加) は、より長い時間ブロックされる可能性があります。iOS では、iCloud データはオンデマンドでのみダウンロードされます。この要求は、永続ストアを追加したときに発生します。NSPersistentStoreCoordinatorがネットワークと通信中 (または通信しようとしている) のため、空白の画面が表示されます。Apple のサンプル コードではこれを別のキューに入れているので、これも行う必要があります。

于 2013-06-03T22:59:17.290 に答える
0

あなたのコードはこれを示していませんが-URLForUbiquityContainerIdentifier、メインスレッドで呼び出すことはできません。Appleのドキュメントからのメモ:

重要: アプリのメイン スレッドからこのメソッドを呼び出さないでください。このメソッドは、iCloud をセットアップして要求された URL を返すのにかなりの時間がかかる可能性があるため、常にセカンダリ スレッドから呼び出す必要があります。特に起動時に iCloud が使用可能かどうかを判断するには、代わりに ubiquityIdentityToken メソッドを呼び出します。

長い時間がかかり、アプリがロードされていないように見えますが、実際にはそのメソッドが返されるのを待っているだけです。

于 2013-06-03T19:55:15.250 に答える