Core data 如何在不使用[index]的情况下从单个CoreData记录中获取字段(属性)?

Core data 如何在不使用[index]的情况下从单个CoreData记录中获取字段(属性)?,core-data,xcode7,magicalrecord-2.2,Core Data,Xcode7,Magicalrecord 2.2,我有一个CoreData记录,其中包含应用程序的所有设置。当我读取单个记录(使用MagicalRecord)时,我得到一个数组。我的问题是:我是否可以在不使用“[0]”(字段索引)而使用[@“shopOpens]”的情况下获取记录中各个字段的可寻址性 我是这样想的,但我不认为这是对的: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"aMostRecentFlag == 1"]; // find old records

我有一个CoreData记录,其中包含应用程序的所有设置。当我读取单个记录(使用MagicalRecord)时,我得到一个数组。我的问题是:我是否可以在不使用“[0]”(字段索引)而使用[@“shopOpens]”的情况下获取记录中各个字段的可寻址性

我是这样想的,但我不认为这是对的:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"aMostRecentFlag == 1"];  //  find old records
preferenceData = [PreferenceData MR_findAllWithPredicate:predicate inContext:defaultContext];  //  source

   NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *preferencesDict = [[userDefaults dictionaryForKey:@"preferencesDictionary"] mutableCopy];  //  target

//  start filling the userDefaults from the last Preferences record
/*
 Printing description of preferencesDict: {
 apptInterval = 15;
 colorScheme = Saori;
 servicesType = 1;
 shopCloses = 2000;
 shopOpens = 900;
 showServices = 0;
 syncToiCloud = 0;
 timeFormat = 12;
 }
 */

[preferencesDict setObject: preferenceData.colorScheme  forKey:@"shopOpens"];
更新

对于那些有类似问题的人,我最终是这样想的:

NSPredicate *filter = [NSPredicate predicateWithFormat:@"aMostRecentFlag == 0"];  //  find old records
NSFetchRequest *freqest = [PreferenceData MR_requestAllWithPredicate: filter];
[freqest setResultType: NSDictionaryResultType];
NSDictionary *perferenceData = [PreferenceData MR_executeFetchRequest:freqest];

免责声明:我从未使用过魔法记录,所以第一部分只是一个有根据的猜测

我认为preferenceData首先是
NSArray
的一个实例,因为方法名使用
findAll
,这表明它将返回多个实例。其次,正常的核心数据获取返回一个数组,find方法没有明显的理由返回任何不同的结果。第三,在问题中使用索引操作引用

因此,
preferenceData
很可能是存储中与指定谓词匹配的所有对象的数组。您指出只有一个这样的对象,这意味着您可以抓取第一个对象

PreferenceData *preferenceData = [[PreferenceData
    MR_findAllWithPredicate:predicate inContext:defaultContext] firstObject];
现在,除非它是nil,否则您拥有核心数据存储中的对象

您应该能够以任何方式访问它的属性来引用它

但是请注意,您可以使用
NSDictionaryResultType
从核心数据中提取对象作为字典,这可能是一个更好的选择


此外,您还可以向托管对象发送
dictionaryWithValuesForKeys:
以获取特定属性的字典。

为什么同时使用Magic Record和NSUserDefaults来存储相同的信息?看起来NSUserDefaults就足够了。需要CoreData store,因为它最终会转到iCloud共享。Preferences是三个实体中的一个,也是唯一一个需要为最终在iCloudMagicalRecord中的存储进行更改的实体,它与这个问题没有任何关系,我不知道为什么要将它放在那里!也就是说,是的,我知道CoreData返回一个数组;我想获取该数组(由于mostRecentFlag,可能只返回1条相关记录)。我想获取该记录并检索每个字段(属性),然后将其放在一个managedObject中,其中大约有50个字段。我知道我可以使用数字索引,但我希望使用managedObject中的字段名,以避免CoreData更改CoreData记录中属性的顺序。请阅读文章的第二部分。您可以将获取的对象作为字典返回。您还可以使用托管对象和一组键创建字典。您可以更进一步,通过字典设置值
setValuesForKeysWithDictionary:
。cocoa API提供了一个不错的动态界面,可以根据键值对更改和观察对象。。。谢谢我已经更新了问题,以显示我的版本如何做到这一点。