2013-02-26 4 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

처음에는 핵심 데이터가 데이터베이스가 아닙니다. 오브젝트 그래프로, 어떤 종류의 저장 공간에 저장할 수 있습니다. 개체에 고유 한 identifier이있는 경우 동일한 identifier 값을 사용하여 가져 오는 것이 동일한 개체를 제공합니다. 핵심 데이터는 동일한 개체 (예 : 식별자가 7 인 책)에 대해 관리되는 개체의 다른 인스턴스를 만들지 않으므로 동일한 개체를 처리 할 모든 곳에서 15 번 가져 오면 문제가 없습니다. 같은 것을 가지고 올랐다.

+0

큰 도움이되었습니다. 핵심 데이터에 대해 오해했습니다. – glast

관련 문제