2010-02-14 3 views
1

В следующем коде удаляется основной объект данных, если пользователь не завершил модификацию новой записи (это происходит при операции вставки). Контроллер корневого представления создал объект и передал ссылку на мое представление. Он отлично работает, если пользователь нажимает кнопку «done» на моем представлении, но если вместо этого они перемещаются назад, используя кнопку «назад» на панели навигации, корневой вид, который он возвращает, просто зависает навсегда.Удаление объекта данных ядра перед появлением представления из UINavigationController

Я делаю что-то явно неправильно? Я рассматривал ожидание создания объекта до тех пор, пока пользователь не завершит просмотр, но в будущем это представление также будет обрабатывать редактирование существующих объектов, поэтому мой текущий метод передачи существующего объекта в это представление является предпочтительным.

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 

    // If the baby has no name, delete the Baby object that the root view 
    // already created. Otherwise save it. 
    NSManagedObjectContext *context = self.baby.managedObjectContext; 

    if ([self.babyNameField.text length] == 0) 
     [context deleteObject:baby]; 

    // Save 
    NSError *error = nil; 
    if (![context save:&error]) { 
     // unresolved jmu - handle error 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]);  
    } 

} 
+0

где вы размещаете 'ребенка'? Не могли бы вы отправить сообщение, которое отображается в консоли при его сбое? – FelixLam

ответ

0

Это общий подход, и этот код выглядит хорошо.

Установили ли вы точку останова и прошли, чтобы убедиться? Вам нужно отлаживать и отслеживать, где находится код.

+0

Спасибо, что сообщили мне, что это стандартный способ добиться этого. Я прошел через него, и метод завершился без ошибок. Если я сломаю отладчик после того, как он зависает, в стеке действительно ничего интересного нет (по крайней мере, не для новичков iPhone): mach_msg_trap -> mach_msg -> CFRunLoopRunSpecific -> ... –

+0

Ahh. Новичок. У меня не было открытого окна консоли. Он не был висел, он остановился на исключении «CoreData не смог выполнить ошибку». Мне нужно сделать что-то еще, так что представление, к которому я возвращаюсь, не имеет ссылки на сущность, которую я удалил ... –

+0

Я смог исправить это, хотя это было своего рода обход. Код начинался с учебника, в котором объект был сохранен сразу после его создания и перед созданием нового представления. Я удалил этот код, так как теперь я сохраняю его при закрытии нового представления. Поскольку теперь я больше не сохраняю в корневом представлении, все, что содержит ссылку на этот новый объект, не получает его и больше не вызывает проблемы. Мне все равно хотелось бы знать, что это было. Я предполагаю, что это представление таблицы в корневом представлении, но я не мог точно определить это. –

Смежные вопросы