Core data 如何在不使用[index]的情况下从单个CoreData记录中获取字段(属性)?
我有一个CoreData记录,其中包含应用程序的所有设置。当我读取单个记录(使用MagicalRecord)时,我得到一个数组。我的问题是:我是否可以在不使用“[0]”(字段索引)而使用[@“shopOpens]”的情况下获取记录中各个字段的可寻址性 我是这样想的,但我不认为这是对的: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
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提供了一个不错的动态界面,可以根据键值对更改和观察对象。。。谢谢我已经更新了问题,以显示我的版本如何做到这一点。