核心数据提取返回意外结果

时间:2014-01-16 01:34:58

标签: ios core-data nspredicate nsfetchrequest

使用核心数据,我创建了一个fetch,它应该总是返回一个对象(基于一个特定的谓词)但不知何故它返回多个对象。我想知道我对核心数据谓词/比较的工作原理是否存在缺陷。

我的模型的相关部分概述(对于电子邮件客户端)

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"

所以,我假设如果我获取一个线程,其中threadId为12345 AND folder.name为“inbox”,我应该只获得1个线程。但在上述情况下我得到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 个答案:

答案 0 :(得分:1)

我认为你只是有一个错字。你只需说出folder ==文件夹,而不是使用你传入的参数。当然,文件夹总是等于文件夹。

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