NSManagedObjectContext не видит изменений (hasChanges всегда ложно) - PullRequest
1 голос
/ 12 января 2012

У меня есть очень простая установка с использованием основных данных: один NSManagedObjectContext и два NSFetchedResultsController с. Приложение имеет собственный подкласс NSManagedObject.

То, что я делаю, более или менее следующее (псевдокод / ​​поток):

1. create an NSFetchRequest
    -> with it an NSFetchedResultsController
       (and attach an NSFetchedResultsControllerDelegate)
2. fetch the objects from the store
3. create another NSFetchRequest (in/from/with the same context)
    -> with it a second NSFetchedResultsController
4. fetch a subset of objects
5. change an object via
    [[[secondFetchedResultsController fetchedObjects] objectAtIndex:0]
            setWhateverSyncedProperty:differentValue]
6. save the NSManagedObjectContext (-> no error)
7. restart app -> changes lost

То, что я прочитал в документации, это то, что a) первый делегат FetchedResultsController должен получить событие controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: и b) NSManagedObjectContext сохранил изменения в постоянном хранилище. Ничего из этого не происходит.

Я бы также ожидал, что NSManagedObjectContext "увидит" изменения непосредственно перед сохранением, то есть вернет YES, когда я вызову "hasChanges" для него. Это не. Вероятно, это также является причиной того, что ничего не сохраняется в постоянном хранилище: он думает, что изменений нет.

Как ни странно, когда я "NSLog" Содержимое контекста, я вижу измененный объект. Итак, изменения в памяти ...

Последнее, но не менее важное: при звонке

[[self managedObjectContext] refreshObject:[[[self fetchedResultsController] fetchedObjects] objectAtIndex:2] mergeChanges:YES];

делегат получает сообщение didChangeObject!

У меня есть ощущение, что это может быть связано с "Примечаниями, относящимися к значению ключа" в hasChanges в NSManagedObjectContext Reference Class , но я не понимаю, думаю.

Любые идеи и / или подсказки приветствуются.

Кстати: я на симуляторе iPhone и на XCode 3.2.5.

Ответы [ 2 ]

1 голос
/ 08 мая 2013

Это случилось со мной раньше. убедитесь, что ваши свойства @dynamic, а не @synthesize

1 голос
/ 16 января 2012

Убедитесь, что у вас есть сильная ссылка на ваш NSManagedObjectContext.Похоже, вы теряете контекст, а управляемые объекты теряют свой контекст.Это объясняет, что изменения не сохраняются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...