ManagedObjectContext, кажется, изменяется после сохранения и не может быть изменен каким-либо другим ViewController

У меня есть MOC, созданный в моем классе AppDelegate. У меня есть свойство MOC в моем RootView, которое устанавливается AppDelegate примерно так:

rootView.managedObjectContext = self.managedObjectContext;

Этот rootView создает в какой-то момент ModalView и таким же образом устанавливает там свойство MOC.

Все работает нормально. Я могу создавать новые управляемые объекты, представления могут получать к ним доступ и удалять их.

До тех пор, пока я не сделаю [self.managedObjectContext save:&error] (в классе AppDelegate, когда приложение переходит в фоновый режим).

После этого, если я создам новый управляемый объект в rootView, я не смогу удалить этот новый объект через модальное представление с чем-то вроде: [self.managedObjectContext deleteObject:managedObject]

Приложение вылетает. Иногда в консоли появлялось сообщение об ошибке, например: NSManagedObjectContext не может удалять объекты в других контекстах.

Так что похоже, что после сохранения MOC как-то меняется.

Что там происходит, что я пропустил.

Я использую iOS 4.1.

Спасибо и ура,

Бен


person Ben Zwak    schedule 14.09.2010    source источник
comment
Нам, вероятно, придется увидеть код, в котором вы создаете контекст, назначаете и создаете объект, который отклонен.   -  person TechZen    schedule 14.09.2010


Ответы (2)


Без кода мало что могу сказать, но я могу предположить, основываясь на вашем описании.

Если у вас есть собственный метод получения для свойства managedObjectContext в делегате приложения, который создает контекст, если он равен нулю, возможно, вы испортили его, заставив метод доступа каждый раз генерировать новый контекст.

Например, аксессоры шаблона Xcode выглядят так:

- (NSManagedObjectContext *) managedObjectContext {

    if (managedObjectContext != nil) {
        return managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        managedObjectContext = [[NSManagedObjectContext alloc] init];
        [managedObjectContext setPersistentStoreCoordinator: coordinator];
    }
    return managedObjectContext;
}

Если бы вы сделали что-то подобное, но пропустили тест для существующего контекста, вы бы получали новый контекст каждый раз, когда вызывается self.managedObjectContext.

person TechZen    schedule 14.09.2010
comment
Прямо сейчас я не могу получить свой код. Я опубликую больше позже в тот же день. Но я знаю, что у меня есть тест для существующего manageObjectContext в моем методе получения. Я могу без проблем обращаться к ManagedObjectContext много раз. Ошибка возникает после того, как я сохранил контекст. И только для управляемых объектов, которые я добавил после сохранения. - person Ben Zwak; 14.09.2010

Итак, это действительно странно: два дня назад я прекратил работу над проектом из-за проблемы с MOC. Вчера вечером я снова начал работать над этим. Я абсолютно ничего не менял в коде и просто хотел воспроизвести ошибку для ее отладки. И что случилось? Ошибка больше не появлялась. Так что кажется, что перезагрузка компьютера «решила» проблему. С тех пор ошибка больше никогда не повторялась, даже после нескольких часов работы и тестирования.

Большое спасибо за помощь в любом случае.

Пока,

Бен

person Ben Zwak    schedule 15.09.2010