CoreData NSArrayController addObject: Путаница - PullRequest
1 голос
/ 28 июня 2011

Я анализирую документ * .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"]);

... к указанному выше для цикла я получаю соответствующее значение массива и (NULL) для значения контроллера. Я получаю одинаковые результаты, использую ли я значения промежуточного массива или жестко закодированные значения.

При сохранении документа в файл * .xml я могу видеть, что итоговые данные хорошо отображены, вместе с отношением name = "dataDetail" type = "0/0" destination = "DATADETAIL" / однако, отношение Подробные данные отсутствуют (что и следовало ожидать, поскольку данные не добавляются в контроллер массива подробных данных).

Нужно ли что-то делать, чтобы сообщить Детализированному массиву данных ArrayController принимать объекты, связанные с контроллером суммарных данных массива? Если так, как это достигнуто? Если нет, то что я делаю не так?

Обновление:

Я нашел проблему. У меня не было контроллера данных массива данных в качестве источника ссылки владельца файла. Как только я подключил это, это работает как очарование. Если бы я только мог удержать его от использования столько памяти, сколько он импортирует данные ...

1 Ответ

1 голос
/ 29 июня 2011

Вы не используете базовые данные.Все объекты базовых данных являются или наследуются от NSManagedObject.Вы просто используете универсальные (наиболее универсальные из возможных) экземпляры NSObject, а затем присваиваете им ключи и значения с помощью функции ассоциативного хранения (это похоже на словарь, прикрепленный к каждому объекту, которому могут быть назначены произвольные ключи и значения.)

Итак, вы не получаете никакого управления объектами или отношениями между ними.

Не совсем точно, что вы пытаетесь сделать.

...