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

В моем классе AppDelegate создан MOC. У меня есть свойство 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.

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

Ben

Ответы [ 2 ]

0 голосов
/ 15 сентября 2010

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

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

Bye,

Ben

0 голосов
/ 14 сентября 2010

Не могу многое сказать без кода, но я могу сделать дикую догадку, основываясь на вашем описании.

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

Например, аксессоры шаблона 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.

...