2012-03-18 2 views
0

Я создаю приложение с основными данными на Xcode 3.2.5, и он отлично работает. Но теперь я устанавливаю Xcode 4.3.1, и теперь мои данные не сохраняются при закрытии приложения. [context save:&error] - больше не работает (это не сохранение данных). Если у кого-то есть такая же проблема, пожалуйста, сообщите, как ее разрешить.Основные данные не сохраняют мои данные. И я теряю все сохраненные данные после закрытия приложения.

+0

Есть ли у объекта 'error' какие-либо данные ??? –

+0

Ошибка произошла. Все в порядке. Но когда приложение закрыло данные, тоже разобрались. – rowwingman

+0

Какой тип магазина вы используете? Например, вы не используете память в памяти? –

ответ

2

Трудно ответить, не более подробной информации, но вы должны иметь такой метод в вашем приложении:

- (void)saveContext 
{ 
NSError *error = nil; 
NSManagedObjectContext *managedObjectContext = self.managedObjectContext; 
if (managedObjectContext != nil) 
{ 
    if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) 
    { 
     /* 
     Replace this implementation with code to handle the error appropriately. 

     abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
     */ 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 
} 
} 

Таким образом, если есть какая-то ошибка, вы получите его в консоли.

В принципе, каждый раз, когда вы вносите изменения в свои данные, вы должны вызвать метод saveContext, а не только при закрытии приложения.

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

+0

У меня есть этот. И это отлично работает. Но теперь это не сработает. Единственное изменение, которое я делаю, устанавливает новый Xcode. – rowwingman

+1

Тогда, может быть, при запуске что-то сбросит ваши данные? – moxy

+0

да, вы правы. Я перезагружаю каждый раз, когда моя база данных предварительной установки)) – rowwingman

0

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

Например, значение одного из полей объекта: nil, но вы выбрали ограничение Not Null в Xcode во время моделирования базы данных. Проверьте эту базу данных на наличие ограничений: не null, дополнительная проверка для значений (максимальное значение, минимальное значение, регулярные выражения для строк и т. Д.).

И добавить этот код после сохранения:

if (error) { 
    NSLog(@"Data cannot be saved: %@", error); 
} 


UPD Как Paul.s говорят, что правильный способ проверки является:

if (![context save:&error]) { 
    NSLog(@"Data cannot be saved: %@", error); 
} 

Более подробная информация об обработке ошибок, как, что представленные here

+0

Неправильный способ проверить наличие ошибки. –

+0

Было бы вежливо обеспечить правильный путь для него;) –

+0

Вы проверяете возврат '- (BOOL) save: (NSError **) error', если это возвращает' NO', значит, это не сработало, а затем вы должны допросить Ошибка. Вы никогда не допросите ошибку сразу. –

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