MagicalRecord在获取请求中不返回NSDictionary

时间:2015-10-26 20:50:25

标签: objective-c xcode7 magicalrecord-2.2

这是我的代码:

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;我的代码有问题吗?顺便说一句,获取请求不会返回任何内容,尽管应该有一条记录。

1 个答案:

答案 0 :(得分:4)

似乎评论已经得出答案,但我不确定每个人都清楚。

获取请求返回结果数组。通常,表示结果的对象将是模型中指定的类。如果你是NSManagedObject的子类(就像你应该的那样),那么它将是子类。如果没有,它将是一个具有通用外观的NSManagedObject,其属性可通过valueForKey:访问。

但是,您可以要求将结果作为词典返回。这并不意味着executeFetchRequest:error:方法返回字典。相反,它意味着数组中的每个对象都是字典。

无论您获得哪种格式的结果,都必须从阵列中拉出您关心的对象。一个常见的习惯用法是简单地将.lastObject.firstObject附加到executeFetchRequest:error:调用的末尾。类似的东西:

MyObject *object = [context executeFetchRequest:request error:NULL].firstObject;

魔法记录只不过是围绕核心数据类的奇特包装。它提供了方便的方法,但Core Data的所有常用语义仍然存在。