核心数据提取返回意外结果
Posted
技术标签:
【中文标题】核心数据提取返回意外结果【英文标题】:Core Data Fetch Returns Unexpected Results 【发布时间】:2014-01-16 01:34:58 【问题描述】:使用核心数据,我创建了一个 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"
所以,我假设如果我获取一个线程 ID 为 12345 且文件夹名称为“收件箱”的线程,我应该只获得 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】:我想你只是有一个错字。你只是说文件夹==文件夹而不是使用你传入的参数。所以当然,文件夹总是等于文件夹。
[request setPredicate:[NSPredicate predicateWithFormat:@"threadId == %llu && folder == %@", threadId, folder]];
【讨论】:
以上是关于核心数据提取返回意外结果的主要内容,如果未能解决你的问题,请参考以下文章