Как я могу изменить сущности, когда контекст сохранен в Базовых данных? - PullRequest
0 голосов
/ 08 декабря 2011

Я использую уведомление с именем 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 ]

1 голос
/ 08 декабря 2011

Этот внешний {()} говорит вам, что [userInfo objectForKey:@"inserted"] на самом деле возвращает NSSet, содержащий один TaskInfo, а не само TaskInfo.

Я не уверен, что именно вы подразумеваете под «экстраполировать эти данные в мою модель управляемых объектов», но если это означает «обновить другую NSManagedObjectContext, чтобы эти недавно сохраненные изменения появились в ней», есть более простой способ:

Взгляните на mergeChangesFromContextDidSaveNotification: в руководстве. Он берет NSManagedObjectContextDidSaveNotification, запущенный контекстом A, и помещает все только что сохраненные изменения в контекст B. Нет необходимости копаться в userInfo уведомления.

0 голосов
/ 08 декабря 2011

Таким образом, я закончил тем, что нашел решение своей проблемы, найдя objectID задачи непосредственно перед ее сохранением в делегате AddViewController, и передав его в представление основной таблицы, которое я использовал в уведомлении.Намного проще, чем пытаться разобрать список изменений в словаре userInfo NSManagedObjectContextDidSaveNotification.

...