使用NSArray从iOS上的可转换核心数据创建对象

使用NSArray从iOS上的可转换核心数据创建对象,ios,objective-c,json,parsing,core-data,Ios,Objective C,Json,Parsing,Core Data,我使用核心数据检索可转移对象,然后将其保存为NSArray,如下所示: NSArray *bigDataResultsArray = [XAppDelegate.managedObjectContext executeFetchRequest:bigDataFetchRequest error:&error]; NSArray *bigDataResultsArrayJSON = [bigDataResultsArray valueForKey:@"bigData"]; 我可以将val

我使用核心数据检索可转移对象,然后将其保存为NSArray,如下所示:

NSArray *bigDataResultsArray = [XAppDelegate.managedObjectContext executeFetchRequest:bigDataFetchRequest error:&error];
NSArray *bigDataResultsArrayJSON = [bigDataResultsArray valueForKey:@"bigData"];
我可以将valueForKey缩小到一个较小的对象数组,但它仅显示为一个对象

当我试图从以下内容中提取“值”时,我得到一个错误,即它不符合值。数据采用以下格式,不会解析为JSON:

我尝试使用以下方法提取值:

    NSArray *styleArray = [bigDataResultsArrayJSON valueForKey:@"Styles"];
    NSLog(@"%@", [styleArray valueForKey:@"Value"]);
这是一个错误。但是,如果我记录样式数组,我会得到以下结果“

有谁能帮助我将此数据的最后一层提取到一个值对象数组中。我已尝试按如下方式转换为NSData,然后转换为JSON,但数据的格式无法解析:

NSData *raw = [[ra valueForKey:@"bigData"] dataUsingEncoding:NSUTF8StringEncoding]

非常感谢您的帮助。

您可以从字典数组中提取仅包含一个字段的数组:

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, …];

您的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*styleArray=[bigDataResultsArrayJSON valueForKey:@“Styles”];
NSMutableArray*值数组=[NSMutableArray];

对于(int i=0;i您到底想做什么?您想在不创建新实体和设置新关系的情况下将数组存储在托管对象中?“当我尝试提取“值”时”-您到底尝试了什么?-“…并且不会解析为JSON"-您看过NSJSONSerialization吗?您好,我已经更新了我的答案。我正在尝试从一个更大的数据对象获取一个值项数组。我看起来像NSJSONSerialization,但在将数组/str/数据传递给编码器时出错。谢谢advance@EHarpham:什么是
colorsarray
?代码中没有定义它。(你复制/粘贴了真实的代码,不是吗?)-请展示您使用NSJSONSerialization尝试的内容。抱歉。ColorySarray应该是stylesArray。您编辑了代码。谢谢。如果我不知道dictArray有多大,我将如何创建它?使用
NSMutableArray
并在循环中调用
addObject
。我从核心数据中检索的对象仅显示作为一个对象,我很不确定我该怎么做。这是我最初的问题
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);