Книга: iOS. Приемы программирования
Обсуждение
Обсуждение
Можно удалять управляемые объекты (записи из таблицы базы данных) с помощью метода экземпляра deleteObject:, относящегося к классу NSManagedObjectContext.
Ни в одном из своих параметров этот метод не сообщает вам об ошибке, равно как и не возвращает значения BOOL. Таким образом, у вас нет надежного способа узнать, был ли объект успешно удален с помощью контекста управляемых объектов. Для получения этой информации лучше использовать метод isDeleted управляемого объекта.
С учетом данной информации изменим код, написанный ранее в этом разделе:
— (BOOL) application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[self createNewPersonWithFirstName:@"Anthony"
lastName:@"Robbins"
age:51];
[self createNewPersonWithFirstName:@"Richard"
lastName:@"Branson"
age:61];
/* Сначала создаем запрос выборки данных. */
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSError *requestError = nil;
/* Теперь применим запрос выборки данных к контексту. */
NSArray *persons =
[self.managedObjectContext executeFetchRequest: fetchRequest
error:&requestError];
/* Убеждаемся, что получили массив. */
if ([persons count] > 0){
/* Удаляем последний контакт из массива. */
Person *lastPerson = [persons lastObject];
[self.managedObjectContext deleteObject: lastPerson];
if ([lastPerson isDeleted]){
NSLog(@"Successfully deleted the last person…");
NSError *savingError = nil;
if ([self.managedObjectContext save:&savingError]){
NSLog(@"Successfully saved the context.");
} else {
NSLog(@"Failed to save the context.");
}
} else {
NSLog(@"Failed to delete the last person.");
}
} else {
NSLog(@"Could not find any Person entities in the context.");
}
self.window = [[UIWindow alloc] initWithFrame:
[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
После запуска приложения в окне консоли отобразится примерно следующий результат:
Successfully deleted the last person… // последний контакт успешно удален
Successfully saved the context. // контекст успешно сохранен