这是我的代码:
NSPredicate *filter = [NSPredicate predicateWithFormat:@"aMostRecentFlag == 1"]; // find old records
NSFetchRequest *fetchRequest = [PreferenceData MR_requestAllWithPredicate: filter];
[fetchRequest setResultType: NSDictionaryResultType];
NSDictionary *preferenceData = [PreferenceData MR_executeFetchRequest:fetchRequest];
我从构建中收到警告:
Incompatible pointer types initializing 'NSDictionary *' with an expression of type 'NSArray *'
表示MR没有按照记录的情况返回NSDictionary;我的代码有问题吗?顺便说一句,获取请求不会返回任何内容,尽管应该有一条记录。
答案 0 :(得分:4)
似乎评论已经得出答案,但我不确定每个人都清楚。
获取请求返回结果数组。通常,表示结果的对象将是模型中指定的类。如果你是NSManagedObject
的子类(就像你应该的那样),那么它将是子类。如果没有,它将是一个具有通用外观的NSManagedObject,其属性可通过valueForKey:
访问。
但是,您可以要求将结果作为词典返回。这并不意味着executeFetchRequest:error:
方法返回字典。相反,它意味着数组中的每个对象都是字典。
无论您获得哪种格式的结果,都必须从阵列中拉出您关心的对象。一个常见的习惯用法是简单地将.lastObject
或.firstObject
附加到executeFetchRequest:error:
调用的末尾。类似的东西:
MyObject *object = [context executeFetchRequest:request error:NULL].firstObject;
魔法记录只不过是围绕核心数据类的奇特包装。它提供了方便的方法,但Core Data的所有常用语义仍然存在。