在Core Data中保存上下文时,如何更改实体?

时间:2011-12-08 02:30:55

标签: iphone objective-c ios core-data

我正在使用名为NSManagedObjectContextDidSaveNotification的通知,当它收到通知时,userInfo字典包含在保存期间对上下文所做的所有更改。如何将该数据外推到我的托管对象模型中?我试过这个

- (void)addControllerContextDidSave:(NSNotification*)saveNotification {

    NSMutableDictionary *userInfo = (NSMutableDictionary *)[saveNotification userInfo];
    NSLog(@"userInfo is %@", userInfo);
    TaskInfo *taskInfo = (TaskInfo *)[userInfo objectForKey:@"inserted"];
    NSLog(@"taskInfo is %@", taskInfo);
}

其中TaskInfo是我的自定义托管对象模型。那印刷了这个

    userInfo is {
        inserted = "{(\n    <TaskInfo: 0x15f350> (entity: TaskInfo; id: 0x13fda0 <x-       coredata://1F98E14E-259F-4CB3-84E2-9AC8466CCD1B/TaskInfo/p2> ; data: {\n    completionDate = nil;\n    creationDate = \"2011-12-08 02:14:04 +0000\";\n    duration = 10860;\n    elapsedTime = 0;\n    isCompleted = 0;\n    isRepeating = 0;\n    isRunning = 0;\n    isToday = 0;\n    projectedEndTime = nil;\n    specifics = nil;\n    startTime = nil;\n    timesReminded = 0;\n    title = haha;\n})\n)}";
        updated = "{(\n)}";
    }
    2011-12-07 20:14:54.147 Tisk Task 3[3161:707] taskInfo is {(
        <TaskInfo: 0x15f350> (entity: TaskInfo; id: 0x13fda0 <x-coredata://1F98E14E-259F-    4CB3-84E2-9AC8466CCD1B/TaskInfo/p2> ; data: {
        completionDate = nil;
        creationDate = "2011-12-08 02:14:04 +0000";
        duration = 10860;
        elapsedTime = 0;
        isCompleted = 0;
        isRepeating = 0;
        isRunning = 0;
        isToday = 0;
        projectedEndTime = nil;
        specifics = nil;
        startTime = nil;
        timesReminded = 0;
        title = haha;
    })
    )}

我认为问题是TaskInfo模型外部的额外{{}}集。有人有什么建议吗?

2 个答案:

答案 0 :(得分:1)

外部{()}告诉您[userInfo objectForKey:@"inserted"]实际上正在返回包含单个TaskInfo的NSSet,而不是TaskInfo本身。

我不确定“将数据推断到我的托管对象模型中”究竟是什么意思,但是如果它意味着“更新另一个NSManagedObjectContext以便那些新保存的更改出现在其中”,那么就更容易了方式:

请查看手册中的mergeChangesFromContextDidSaveNotification:。它需要由上下文A触发NSManagedObjectContextDidSaveNotification,并将刚刚保存的所有更改放入上下文B.不要在通知的userInfo周围进行调整。

答案 1 :(得分:0)

所以我最终找到了解决我自己问题的方法,在将任务的objectID保存在AddViewController委托中之前找到它,并将其传递给我在通知中使用的主表视图。比尝试解析NSManagedObjectContextDidSaveNotification的userInfo字典中的更改日志要容易得多。