У меня есть следующая проблема: В определенном контроллере представления у меня есть NSDictionary, который сам по себе является записью в объекте NSArray. Этот контроллер представления имеет дочернее представление, которое отображает некоторые пары ключ-значение, которые есть в этом словаре. Поскольку мне нужны только некоторые пары ключ-значение, я создаю новый объект словаря, из которого я затем удаляю пару ключ-значение, которую я не хочу иметь в ней. Чтобы иметь доступ к этому словарю в дочернем представлении, я мог бы просто установить словарь через свойство, которое, кажется, работает нормально. Для иллюстрации с некоторым кодом:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
...
// today is an instance of NSArray holding a number of NSDictionary objects
NSDictionary *completeData = [self.today objectAtIndex:row];
NSDictionary *data = [[NSDictionary alloc] initWithDictionary:completeData];
[data removeObjectForKey:@"name"];
SomeViewController *childController = [[SomeViewController alloc] init];
childController.data = data;
[self.navigationController pushViewController:childController animated:YES];
[childController release];
// This results in a EXC_BAD_ACCESS error when navigating back to the parent
// view and calling didSelectRowAtIndexPath a second time. When commenting this
// line out, the error dissapears, but now the object leaks
[data release];
}
Проблема возникает, когда после возвращения к родительскому представлению я пытаюсь заменить объект NSArray (сегодня) обновленной версией самого себя, вызвав
- (void)refreshDataNotification:(NSNotification *)notification {
if (notification) {
self.today = [NSArray arrayWithArray:[[[MyAppDelegate getAppDelegate] todaySchedule]
objectForKey:@"data"]];
[self.tableView reloadData];
}
}
Обратите внимание, что до тех пор, пока я не освобождаю 'data' в didSelectRowAtIndexPath, я не получаю никакой ошибки, но тогда объект протекает. Когда я выпускаю его, я получаю EXC_BAD_ACCESS при выполнении refreshDataNotification.
Если кто-то знает, что я могу делать неправильно, пожалуйста, поделитесь со мной.