2014-01-16 3 views
0

핵심 데이터를 사용하여 항상 특정 조건을 기반으로 한 단일 개체를 반환해야하지만 어떤 식 으로든 여러 개체를 반환하는 가져 오기를 만들었습니다. 핵심 데이터 술어/비교 작업 방식에 대한 내 이해의 결함이 있는지 궁금합니다. (이메일 클라이언트에 대한) 내 모델의 관련 부분의핵심 데이터 가져 오기가 예기치 않은 결과를 반환합니다.

개요 핵심 데이터에

Entity: Thread 
Relevant Attributes: thread.folder, thread.threadId 

Entity: Folder 
Relevant Attributes: folder.threads, folder.name 

, 다른 스레드가 동일한 스레드 ID를 가질 수 있지만, 항상 다른 폴더가 있어야합니다.

Example: 

Thread 1: thread.threadId = 12345, thread.folder.name = @"inbox" 
Thread 2: thread.threadId = 12345, thread.folder.name = @"important" 

그래서, 나는 12345 AND "받은 편지함"의 folder.name의 threadId 모두 가지고 스레드를 가져올 경우, 나는 단지 하나 개의 스레드를 받아야한다고 가정한다. 그러나 나는 위의 상황에서 2를 얻는다.

- (Thread *)threadForFolder:(Folder *)folder threadId:(uint64_t)threadId 
{ 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:[Thread entityDescriptionInManagedObjectContext:self.managedObjectContext]]; 
[request setPredicate:[NSPredicate predicateWithFormat:@"threadId == %llu && folder == folder", threadId, folder]]; 

NSArray *results = [self.managedObjectContext executeFetchRequest:request error:nil]; 
//ARRAY RETURNS TWO VALUES!? 

//...more stuff 
} 

왜이 작동하지 않습니다 내가 핵심 데이터에서 가져 오는 오전 방법은 다음과

은?

답변

1

나는 오타가 있다고 생각합니다. 당신은 단지 당신이 전달하는 매개 변수를 사용하는 대신 폴더 == 폴더라고. 물론 물론, 폴더는 항상 폴더와 같습니다.

[request setPredicate:[NSPredicate predicateWithFormat:@"threadId == %llu && folder == %@", threadId, folder]]; 
+0

오 ... my ... 선량! 고맙습니다. – jac300

+0

모든 버그 만이 문제가 될 수 있다면 ... – HalR