0

iOSプロジェクトにUITableViewがあります。ユーザーがテーブルからアイテムを選択すると、オブジェクトはCoreDataから取得され、「Player」オブジェクトに格納されます。次に、このプレーヤーオブジェクトは別のViewControllerに渡されます。

私の質問は、このPlayerオブジェクトの属性に変更を加えた場合、それらの変更を保存するにはどうすればよいですか。CoreDataはどのPlayerオブジェクトが変更されたかをどのように知るのですか?すべてのCoreDataドキュメントには、独自のIDと参照を管理すると記載されているため、playerID属性を設定していません。

もっと:

だから、現時点では、これをやっています(疑似コードを失礼します、私は今手に私のソースコードを持っていません):

Player *player1 = [NSFetchResultController objectAtIndex:0]
Player *player2 = [NSFetchResultController objectAtIndex:1]
GameViewController *gameVC = [[GameViewController alloc] init]
gameVC.player1 = player1;
gameVC.player2 = player2;
gameVC.managedObjectContext = self.managedObjectContext
[self performSegueWithIdentifier:@"Game"]

識別子を持たないPlayerタイプのオブジェクトをgameVCに渡します(Core Dataは明示的なID属性を作成する必要がないためです-伝えられるところでは!)

では、gameVCのMOCは、変更をコミットするオブジェクトをどのようにして正確に知るのでしょうか?

4

1 に答える 1

1

Player オブジェクトに加えた変更は、プレーヤーがフェッチされた管理オブジェクト コンテキストに適用されます。管理オブジェクト コンテキスト参照を新しいビュー コントローラーにも渡すと、管理オブジェクト コンテキストを保存でき、変更が保存されます。

その管理オブジェクト コンテキストの他のすべての変更と共に、そこにある変更に注意してください。

編集した質問に答えるには; moc を保存すると、特定のオブジェクトは保存されず、すべての変更がオブジェクト コンテキストの管理に保存されます。したがって、どのオブジェクトを保存するかを知る必要はありません。

さらに説明を加えると、管理対象オブジェクト コンテキストは一種のスクラッチ パッドです。オブジェクトを永続ストアからコンテキストにプルすると、オブジェクトに変更を加えることができます。ただし、これらの変更は永続ストアに保存されるまで永続的ではありません。節約をより細かくしたい場合は、変更したいオブジェクトだけを含む別の管理対象オブジェクト コンテキストを作成できます。このコンテキストを保存すると、それらのオブジェクトのみが保存されます。ただし、オブジェクトへの変更は、それらを永続ストアに保存し直すまで、他の管理対象オブジェクト コンテキストには表示されません。

于 2012-10-30T10:20:19.127 に答える