MagicalRecord在获取请求中不返回NSDictionary

Spo*_*ude 6 objective-c magicalrecord-2.2 xcode7

这是我的代码:

NSPredicate *filter = [NSPredicate predicateWithFormat:@"aMostRecentFlag == 1"];  //  find old records
NSFetchRequest *fetchRequest = [PreferenceData MR_requestAllWithPredicate: filter];
[fetchRequest setResultType: NSDictionaryResultType];

NSDictionary *preferenceData = [PreferenceData MR_executeFetchRequest:fetchRequest];
Run Code Online (Sandbox Code Playgroud)

我从构建中收到警告:

Incompatible pointer types initializing 'NSDictionary *' with an expression of type 'NSArray *'
Run Code Online (Sandbox Code Playgroud)

这表明MR没有按照文件记录返回NSDictionary; 我的代码有问题吗?顺便说一下,获取请求不会返回任何内容,尽管应该有一条记录.

Avi*_*Avi 5

看来评论已经给出了答案,但不知道大家都清楚了。

获取请求返回结果数组。通常,表示结果的对象将是模型中指定的类。如果您要子类化NSManagedObject(正如您应该做的那样),它将是子类。如果不是,它将是一个看起来通用的 NSManagedObject,您可以通过 访问其属性valueForKey:

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

无论您获得哪种格式的结果,都必须从数组中提取您关心的对象。常见的习惯用法是简单地将.lastObjector附加.firstObject到调用的末尾executeFetchRequest:error:。就像是:

MyObject *object = [context executeFetchRequest:request error:NULL].firstObject;
Run Code Online (Sandbox Code Playgroud)

Magical Record只不过是核心数据类的一个奇特的包装器。它提供了方便的方法,但 Core Data 的所有常用语义仍然有效。