使用 NSArray 从 iOS 上的可转换核心数据创建对象
Posted
技术标签:
【中文标题】使用 NSArray 从 iOS 上的可转换核心数据创建对象【英文标题】:Creating an object from transformable core data on iOS using NSArray 【发布时间】:2013-09-12 13:08:36 【问题描述】:我正在使用核心数据来检索一个可传输对象,然后将其保存为 NSArray,如下所示:
NSArray *bigDataResultsArray = [XAppDelegate.managedObjectContext executeFetchRequest:bigDataFetchRequest error:&error];
NSArray *bigDataResultsArrayJSON = [bigDataResultsArray valueForKey:@"bigData"];
我可以将 valueForKey 缩小为一个较小的对象数组,但它只显示为 1 个对象。
当我尝试从以下内容中提取“值”时,我收到错误,即它不符合值。数据格式如下,不会解析成JSON:
我尝试使用以下方法提取价值:
NSArray *styleArray = [bigDataResultsArrayJSON valueForKey:@"Styles"];
NSLog(@"%@", [styleArray valueForKey:@"Value"]);
这给出了一个错误。但是,如果我记录样式数组,我会得到以下信息“
(
Total = 1;
Value = 5;
,
Total = 1;
Value = "5.5";
,
Total = 75;
Value = 6;
,
Total = 4;
Value = "6.5";
,
Total = 239;
Value = 7;
,
Total = 149;
Value = "7.5";
,
Total = 260;
Value = 8;
,
Total = 214;
Value = "8.5";
,
Total = 259;
Value = 9;
,
Total = 196;
Value = "9.5";
,
Total = 254;
Value = 10;
,
Total = 148;
Value = "10.5";
,
Total = 237;
Value = 11;
,
Total = 38;
Value = 12;
,
Total = 2;
Value = 13;
)
)
谁能帮助我将这些数据的最后一层提取到一个值对象数组中。我尝试转换为 NSData 然后转换为 JSON 如下,但数据的格式不会解析:
NSData *raw = [[ra valueForKey:@"bigData"] dataUsingEncoding:NSUTF8StringEncoding]
非常感谢任何帮助。
【问题讨论】:
你到底想做什么?您想将数组存储在托管对象中而不创建新实体和设置新关系? “当我尝试提取“价值”时......” - 你到底尝试了什么? - "...并且不会解析为 JSON" - 你看过 NSJSONSerialization 吗? 您好,我已经更新了我的答案。我正在尝试从一个更大的数据对象中获取一组值项。我看起来像 NSJSONSerialization 但在将数组/str/data 传递给编码器时出错。提前致谢 @EHarpham:coloursArray
是什么?它没有在您的代码中定义。 (您确实复制/粘贴了真实代码,不是吗?) - 请展示您对 NSJSONSerialization 的尝试。
道歉。 coloursArray 应该是 stylesArray。已编辑代码。
【参考方案1】:
您可以从字典数组中提取一个只有一个字段的数组:
NSArray *dictArray = @[@"total" : @1, @"value" : @5,
@"Total" : @1, @"Value" : @5.5, … ];
NSArray *resultsArray = [dictArray valueForKeyPath:@"value"];
---> @[@5, @5.5, …];
您可以对一组核心数据对象执行相同的操作:
// ... create the managed objects and fill their attributes
object.total = @1;
object.value = @5;
// etc
NSArray *resultsArray = [fetchedObjects valueForKeyPath:@"value"];
---> @[@5, @5.5, …];
【讨论】:
感谢您。如果我不知道 dictArray 有多大,我将如何创建它? 使用NSMutableArray
并循环调用addObject
。
我从核心数据中检索到的对象仅显示为 1 个对象,因此不确定我该怎么做。这是我原来的问题【参考方案2】:
您的 styleArray 是一个字典数组。数组没有键值对;数组的每个元素都可以。 Mundi 所说的是正确答案,并且会给你一个单一的值数组。
为了超级明确,你可以循环遍历 styleArray 的元素,并单独提取每个字典,也许这对你来说会更清楚。
NSArray *styleArray = [bigDataResultsArrayJSON valueForKey:@"Styles"];
NSMutableArray *valuesArray = [NSMutableArray array];
for (int i=0; i<styleArray.count; i++)
NSDictionary *styleDictionary = styleArray[i];
id valueObj = [styleDictionary objectForKey:@"Value"];
[valuesArray addObject:valueObj];
NSLog(@"Values: %@", valuesArray);
【讨论】:
以上是关于使用 NSArray 从 iOS 上的可转换核心数据创建对象的主要内容,如果未能解决你的问题,请参考以下文章
如何从 iOS 的另一个 nsarray 中不存在的核心数据中删除对象?
从Objective C中的NSArray转换时如何比较String?
IOS/Objective-C:按字符串中的单词数对 NSStrings 的 NSArray 进行排序