Kinvey を使用するアプリで、Magical Record を使用して Core Data を管理しています。私の NSManagedObject では、Kinvey の SDK が Core Data を操作するための要件として、次のメソッドを実装しました。
+ (id)kinveyDesignatedInitializer:(NSDictionary *)jsonDocument
{
NSString* existingID = jsonDocument[KCSEntityKeyId];
Task* obj = nil;
NSManagedObjectContext* context = [NSManagedObjectContext MR_defaultContext];
NSEntityDescription* entity = [NSEntityDescription entityForName:@"Task" inManagedObjectContext:context];
if (existingID) {
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"kinvey_id = %@", existingID];
[request setPredicate:predicate];
NSArray* results = [context executeFetchRequest:request error:NULL];
if (results != nil && results.count > 0) {
obj = results[0];
}
}
if (obj == nil) {
//fall back to creating a new if one if there is an error, or if it is new
obj = [[self alloc] initWithEntity:entity insertIntoManagedObjectContext:context];
}
return obj;
}
ただし、これが NSManagedObject のコンテキストを取得する正しい方法であるかどうかはわかりません。
NSManagedObjectContext* context = [NSManagedObjectContext MR_defaultContext];
また、NSManagedObjectContexts と NSManagedObjects の処理について非常に混乱しています
現在のアプリの 1 つで、構造を次のように設定しました。
Main App View Controller
- self.editingContext = [NSManagedObjectContext MR_defaultContext];
Detail Object Views
- self.editingContext = [NSManagedObjectContext MR_contextForCurrentThread];
- self.currentObject = [self.editingContext objectWithID:objectID]; (objectID passed from MAVC)
アプリがクラッシュするという報告を受けているので、何かがおかしいのは明らかです。新しいアプリでは、次のような構造にすることを考えていましたが、マネージド オブジェクトとコンテキストをビュー コントローラー間で渡してもよいかどうかはわかりません。
Main App View Controller
- self.editingContext = [NSManagedObjectContext MR_defaultContext];
- detailVC.currentObject = managedObject;
Detail Object Views
- self.editingContext = self.currentObject.managedObjectContext;
どんな助けでも本当に感謝します!