4

Core Data アプリで iCloud サポートを実装しています (iOS 7 のみ、まだリリースされていません。iCloud サポートは初日からになります)。iCloud の変更に関する WWDC 2013 207 セッションをチェックアウトしましたが、改善が見られて本当にうれしく思います (iCloud の以前の経験もありました)。

物事は本当にうまくいっています。ただし、ユーザーがシステム設定から iCloud を有効または無効にした場合の処理​​方法がわかりません。これにより.sqlite、別のディレクトリに新しいファイルが作成され、ユーザーのデータが失われます。

永続ストアの追加を実装する方法は次のとおりです。

- (void) addPersistentStoreToCoordinator {

    NSMutableDictionary *options = [NSMutableDictionary dictionary];
    [options setObject:@YES forKey:NSMigratePersistentStoresAutomaticallyOption];
    [options setObject:@YES forKey:NSInferMappingModelAutomaticallyOption];

    NSURL *iCloud = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier: nil];

    if (iCloud) {
         [options setObject:@"ABC123~com~myapp~myapp" forKey:NSPersistentStoreUbiquitousContentNameKey];
    }

    NSError* error;

// the only difference in this call that makes the store an iCloud enabled store
// is the NSPersistentStoreUbiquitousContentNameKey in options.

    [persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType
                                          configuration:nil
                                                    URL:self.storeURL
                                                options:options
                                                  error:&error];
}

- (NSURL *)storeURL {

    NSURL *documentsDirectory = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory
                                                                       inDomain:NSUserDomainMask
                                                              appropriateForURL:nil
                                                                         create:YES
                                                                          error:NULL];

    return [documentsDirectory URLByAppendingPathComponent:@"MyApp.sqlite"];
}

ユーザーが設定で iCloud プリファレンスをオフ/オンに切り替えたときに Core Data からデータを保存するにはどうすればよいですか?

[OFF](補足: iCloud が状態>から移行した場合、手動で処理することができました。[ON]古い Core Data からすべてのデータを取得し、これらの NSManagedObject サブクラスを、iCloud を有効にして新しく作成された Core Data に保存します。ただし、このコードは非常にアプリです。特定の(そしてかなり不安定です。私はより一般的な解決策を探しています)。

ありがとう

4

1 に答える 1