使用核心数据,我创建了一个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
}
为什么这不起作用?
答案 0 :(得分:1)
我认为你只是有一个错字。你只需说出folder ==文件夹,而不是使用你传入的参数。当然,文件夹总是等于文件夹。
[request setPredicate:[NSPredicate predicateWithFormat:@"threadId == %llu && folder == %@", threadId, folder]];