2

icloud統合コアデータアプリを作成したところ、通常の状態では問題なく動作しますが、インターネットに接続せずにアプリケーションを最初に起動すると、IOS 6で奇妙な問題が発生しました。アプリケーションが応答しなくなりました。

コードを管理し、この問題に関連するほとんどすべてのトピックを Google で調べましたが、答えが見つかりません。

開発者ポータルで公開されている WWDC 2012 iCloud & Core Data サンプル コード (SharedCoreData) でもまったく同じ問題が発生しました。

Apple のサンプル コードでは、「addPersistentStoreWithType」までこの問題を追跡しました。

以下に、フリーズが発生するアップルのコードの一部を示します。率直に言って、アップルの著作権の問題のため、すべてのコードを共有することを躊躇しました。

しかし、それは、 (BOOL)loadiCloudStore: が既に別のスレッドから呼び出されているため、実際にはスレッドの問題はなく、「managedObjectContext」が呼び出されたときにフリーズが発生するだけです。

では、インターネット接続なしで最初の起動時に「addPersistentStoreWithType」が応答しなくなる理由がわかりましたか?

- (BOOL)loadiCloudStore:(NSError * __autoreleasing *)error {
    BOOL success = YES;
    NSError *localError = nil;

    NSFileManager *fm = [[NSFileManager alloc] init];
    _ubiquityURL = [fm URLForUbiquityContainerIdentifier:nil];

    NSURL *iCloudStoreURL = [self iCloudStoreURL];
    NSURL *iCloudDataURL = [self.ubiquityURL URLByAppendingPathComponent:@"iCloudData"];
    NSDictionary *options = @{ NSPersistentStoreUbiquitousContentNameKey : @"iCloudStore",
                                NSPersistentStoreUbiquitousContentURLKey : iCloudDataURL };

//after that point thread freeze
    _iCloudStore = [self.psc addPersistentStoreWithType:NSSQLiteStoreType
                                          configuration:@"CloudConfig"
                                                    URL:iCloudStoreURL
                                                options:options
                                                  error:&localError];


    success = (_iCloudStore != nil);
    if (success) {
        //set up the file presenter
        _presentedItemURL = iCloudDataURL;
        [NSFileCoordinator addFilePresenter:self];
    } else {
        if (localError  && (error != NULL)) {
            *error = localError;
        }
    }

    return success;
}
4

0 に答える 0