0

我正在使用 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;

任何帮助将非常感激!

4

0 回答 0