私は CoreData に比較的慣れていないので、正しいことをしているかどうかを知りたいです。まず、ドキュメントには次のように記載されています。
「慣例により、View Controller からコンテキストを取得します。ただし、このパターンに従うには、アプリケーションを適切に実装する必要があります。
Core Data と統合するビュー コントローラーを実装する場合、NSManagedObjectContext プロパティを追加できます。
ビュー コントローラーを作成するときは、使用するコンテキストを渡します。既存のコンテキストを渡すか、(新しいコントローラーで個別の編集セットを管理する必要がある状況では) そのために作成した新しいコンテキストを渡します。通常、表示される最初のビュー コントローラーに渡すコンテキストを作成するのは、アプリケーション デリゲートの役割です
。
だから私がやっていることは、私の NSManagedObjectContext のプロパティを作成することです:
MyViewController.H
@interface MyViewController : ViewController
{
NSManagedObjectContext *moc;
}
@property (nonatomic, retain) NSManagedObjectContext *moc;
@end
MyViewController.m
@implementation MyViewController
@synthesize moc=moc;
1.-そして、データベースに変更を加えたい場所はいつでもこれを行います。
MainNexarAppDelegate *appDelegate =
[[UIApplication sharedApplication] delegate];
self.moc = [[NSManagedObjectContext alloc] init];
self.moc.persistentStoreCoordinator = [appDelegate persistentStoreCoordinator];
/*code**/
[self.moc save:&error];
2-.そして、別のスレッドで作業する場合は、プライベート キューで管理できるように、NSPrivateQueueConcurrencyType で NSManagedObjectContext を作成するカスタム メソッドがあります。
//Myclass NSObject<br>
-(NSManagedObjectContext *)createManagedObjectContext{
MainNexarAppDelegate *appDelegate =
[[UIApplication sharedApplication] delegate];
NSPersistentStoreCoordinator *coordinator = [appDelegate persistentStoreCoordinator];
if (coordinator != nil) {
__managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[__managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return __managedObjectContext;
}
//__managedObjectContext is my property from the .h file
//@property (readonly,strong,nonatomic) NSManagedObjectContext* managedObjectContext;
- データベースに変更を加える各View Controllerに対してNSManagedObjectContextを作成することをお勧めしますか?
1.1。[UIApplication sharedApplication] を使用して appdelegate から永続的な NSPersistentStoreCoordinator を取得するのは有効なアプローチですか? - メインスレッドと他のスレッドの間で永続ストアコーディネーターを共有しても安全ですか?
どんな助けでも大歓迎です:)。