iOS: исключение CoreData при обновлении данных - PullRequest
1 голос
/ 23 марта 2012

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

Кодовая выдержка:

NSManagedObjectContext *tmpManagedObjectContext = [self.fetchedResultsController managedObjectContext];

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:tmpManagedObjectContext];
[request setEntity:entity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"contact_id = %@", [dict objectForKey:@"contact_id"]];
[request setPredicate:predicate];

NSError *error = nil;
[request setResultType:NSDictionaryResultType];
[request setPropertiesToFetch:[NSArray arrayWithObjects:@"first_name",@"sync_status",nil]];

Contact *contact = [[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0];
contact.sync_status = @"Y";

error = nil;
if (![tmpManagedObjectContext save:&error]) {
    NSLog(@"Error setting sync status on contact record - error: %@", [error localizedDescription]);
}

Строка, которая вызывает ошибку:

contact.sync_status = @"Y";

Ошибка * Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [NSKnownKeysDictionary1 setSync_status:]: нераспознанный селектор, отправленный экземпляру 0x8907fd0' * Первый стек вызовов вызовов:

Контакт - это класс NSManagedObject, который я автоматически сгенерировал в Xcode.

Мой подход здесь неправильный? У меня не было проблем с получением или удалением записей, но я спотыкаюсь о том, как обновить данные.

Любое руководство или помощь будет принята с благодарностью. Спасибо.

1 Ответ

10 голосов
/ 23 марта 2012

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

Удалите эти строки:

[request setResultType:NSDictionaryResultType];
[request setPropertiesToFetch:[NSArray arrayWithObjects:@"first_name",@"sync_status",nil]];

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

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