2013-02-26 2 views
1

Я запутался в логике основных данных.Основные данные iOS - Почему это работает?

Я обработал основные данные как базу данных, а основные методы данных - как SQL-запрос.

Когда я пытался обновить какой-либо объект в сердцевине данных с объектом локальной памяти, я обнаружил, что я могу сделать эту функцию только с ниже кодом:

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:[NSEntityDescription entityForName:@"Book" inManagedObjectContext:_managedObjectContext]]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"identifier == %@", theBook.identifier]; 
[request setPredicate:predicate]; 

NSError *error; 
Book *book = [[_managedObjectContext executeFetchRequest:request error:&error] lastObject]; 
if (error) { 
    NSLog(@"Error getting book to update: %@", error); 
    abort(); 
} 

// NSLog(@"%d", book == theBook); 

error = nil; 
if (![_managedObjectContext save:&error]) { 
    NSLog(@"Error saving the book: %@", error); 
    abort(); 
} 

theBook является объектом, который я хочу, чтобы обновить объект основных данных с.

И я обнаружил, что сообщение журнала говорит, что два объекта одинаковы ...

Я принес запрос и ничего не делать, но это работает. Почему это работает?

+0

Я обнаружил, что он работает, когда я использовал только секцию сохранения кода. Я думаю, это потому, что 'theBook' также является результатом извлечения. – glast

+0

Ваш вопрос не совсем понятен. и я не понимаю, почему это не сработает. –

+0

Когда я обрабатываю основные данные как базу данных, я думал, что должен (1) получить объект из запроса выборки и (2) отредактировать значение объекта и (3), а затем сохранить. Но он работает, когда я опускаю процесс (1) и (2). Я не владею английским пользователем, поэтому мне трудно объяснить свой вопрос. Извините :) – glast

ответ

1

Вначале Core Data не является базой данных - это граф объектов, который можно сохранить в каком-то хранилище. Если у ваших объектов есть уникальный identifier, то выборка с тем же значением identifier дает вам тот же самый объект. Core Data не создает разные экземпляры управляемых объектов для одних и тех же объектов (скажем, книга с идентификатором = 7), поэтому везде, где вы будете иметь дело с одним и тем же объектом, не имеет значения, если вы его получите 15 раз, вы всегда будете заканчивать с одним и тем же.

+0

Это была большая помощь для меня. Я неправильно понял основные данные. – glast

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