2

データを同期するためにiCloud CoreDataを間に挟んで、MacとiOSアプリに取り組んでいます。

iOS アプリから何かを更新すると、Mac アプリの実行中に更新が既に Mac アプリの PersistentStore に移行されます。問題は、NSArrayController にストアからすべてのデータを強制的にリロードさせる効果的な方法が見つからないことです。

-(void) fetch:(id)sender; を試しました。削除または追加されたエンティティのみを表示できますが、更新されたモデル プロパティは更新されません...

助けてください。ありがとう

4

4 に答える 4

1

最新のデータが管理対象オブジェクト コンテキストに表示され、アレイ コントローラーに表示されない場合は、次のことが必要です。

[_yourManagedObjectContext processPendingChanges];
[_yourArrayController fetchWithRequest:nil merge:YES error:&error];
[_yourArrayController rearrangeObjects];

これを Mac/iOS iCloud アプリで使用して、iCloud ストアが変更されたときに Mac アプリのデータを更新します。

于 2013-03-27T00:45:21.907 に答える
1

私はそれを見つけました

[self.managedObjectContext reset];
[myArrayController fetch:self];

NSTableView (NSArrayController を使用) を強制的に再入力し、新しく処理された NSManagedObjects を表示します。

于 2012-12-27T20:16:38.297 に答える
1

以下は、Apple の Developer Technical Support からの返信です。それは私のために働いた。解決策を提供してくれてありがとう。

OS X アプリの場合、reloadFetchResults が呼び出されたときに、NSManagedObjectContext にそれ自体をリセットしてフェッチを再度実行するように依頼できます。

- (void)reloadFetchedResults:(NSNotification *)note
{
NSDictionary *userInfoDict = [note userInfo];

NSManagedObjectContext *moc = self.coreDataController.mainThreadContext;

// this only works if you used NSMainQueueConcurrencyType
// otherwise use a dispatch_async back to the main thread yourself
//
[moc performBlock:^{
    [self mergeiCloudChanges:userInfoDict forContext:moc];

    [moc reset];
    [self.tableArrayController fetch:self];
}];
}
于 2013-03-27T03:05:08.237 に答える