CoreData NSArrayController addObject:Confusion

时间:2011-06-28 18:19:39

标签: objective-c core-data relationship nsarraycontroller

我正在解析一个包含两个部分的* .xml文档。第一节有摘要数据,第二节有详细数据。我有两个具有一对多关系的数据实体(一个摘要数据条目有许多与之关联的详细数据条目)。我还有两个表视图,一个用于摘要数据,另一个用于详细数据。我已经完成了所有绑定(一遍又一遍),并且没有得到关于键值编码的任何错误消息。

我希望并且可以使用以下代码将摘要数据放入摘要数据阵列控制器中:

NSObject *newEntry = [controllerSummaryDataArray newObject];
[newEntry setValue:valueDate forKey:@"valueDate"];
[newEntry setValue:valueDuration forKey:@"valueDuration"];
[newEntry setValue:valueDistance forKey:@"valueDistance"];
[controllerSummaryDataArray addObject:newEntry];

每次导入* .xml文件时,都会在摘要数据表视图中更新相应的单元格(无论是否调用addObject方法,这都适用 - 这对我来说似乎很奇怪)。当我添加NSLog时(@“持续时间值为:”,[newEntry valueForKey:@“valueDuration”]);它显示适当的值。

我遇到的困难是没有将详细数据插入到详细数据阵列控制器中。我正在从临时数组中提取详细数据(由于xmlParser和预插入计算),因此,以下代码应该可以解决问题。

for (rowCount = 0; rowCount < [arrayDetailData count]; rowCount++) {

    dataDetail = [arrayDetailData objectAtIndex:rowCount];

    NSObject *newDataEntry = [controllerDetailDataArray newObject];

    [newDataEntry setValue:[[NSNumber alloc] initWithFloat:[[dataDetail valueForKey:@"dataDuration"] intValue]] forKey:@"dataDuration"];

    [newDataEntry setValue:[[NSNumber alloc] initWithFloat:([[dataDetail valueForKey:@"dataSpeed"] intValue] * 0.0036)] forKey:@"dataSpeed"];

    [controllerDetailDataArray addObject:newDataEntry];
}

当我添加:

 NSLog(@"The Array Value is %@ and the Controller Value is: %@", [dataDetail valueForKey:@"dataDuration"], [newDataEntry valueForKey:@"dataDuration"]);

...对于上面的for循环我获得了适当的数值和(NULL)的控制器值。无论我使用临时数组的值还是硬编码值,我都得到相同的结果。

将文档保存到* .xml文件时,我可以看到摘要数据都很好地映射出来,完成关系名称=“dataDetail”type =“0/0”destination =“DATADETAIL”/ relationship,但是,没有任何详细数据(由于未将数据添加到详细数据阵列控制器,因此可以预期)。

我是否需要做一些事情来告诉Detail Data ArrayController接受链接到摘要数据阵列控制器的对象?如果是这样,那怎么办?如果没有,我做错了什么?

更新

我发现了问题。我没有将详细数据阵列控制器作为文件所有者的引用插座。一旦我把它连接起来,它就像一个魅力。现在,如果我只能使用这么多内存来导入数据......

1 个答案:

答案 0 :(得分:1)

您没有使用核心数据。所有Core Data对象都是NSManagedObject或从NSManagedObject继承。您只是使用泛型(最通用的)NSObject实例,然后使用关联存储功能为它们分配键和值(这就像附加到可以为其分配任意键和值的每个对象的字典。)

因此,您无法对对象或它们之间的关系进行任何管理。

不确定您要做什么。