Основные данные не сохраняют мои данные. И я теряю все сохраненные данные после закрытия приложения - PullRequest
0 голосов
/ 18 марта 2012

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

Ответы [ 2 ]

2 голосов
/ 18 марта 2012

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

- (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 голосов
/ 18 марта 2012

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

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

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

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


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

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

Более подробная информация об обработке подобных ошибок представлена ​​здесь

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