我正在使用 Magical Record 来管理我使用 Kinvey 的应用程序中的核心数据。在我的 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 感到非常困惑
在我当前的一个应用程序中,我将结构设置为:
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;
任何帮助将非常感激!