У меня есть основанный на представлении NSTableView, который использует представления подклассов NSViewController (InspectorViewController):
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
// Get inspector view controller
InspectorViewController *inspectorViewController = [_inspectorViewControllers objectAtIndex:row];
// Return its view
return inspectorViewController.view;
}
Все в порядке, за исключением того, что представление NSViewController никогда не освобождается, когда я удаляю контроллер представления (который хорошо освобожден).
Если вместо этого я использую этот код:
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
// Get inspector view controller
InspectorViewController *inspectorViewController = [_inspectorViewControllers objectAtIndex:row];
// Return its view
NSTableCellView *view = [[NSTableCellView alloc] init] autorelease];
[view addSubview:inspectorViewController.view];
return view;
}
Вид правильно освобождается, когда я удаляю контроллер представления. Вот код для удаления контроллера представления:
- (void)inspectorViewControllerClosed:(InspectorViewController *)inspectorViewController {
// Get index of inspector view controller
NSUInteger index = [_inspectorViewControllers indexOfObject:inspectorViewController];
// Remove inspector view controller in array
[_inspectorViewControllers removeObject:inspectorViewController];
// Create index set
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:index];
// Begin updates
[_tableView beginUpdates];
// Move row in table view
[_tableView removeRowsAtIndexes:indexSet withAnimation:NSTableViewAnimationEffectFade];
// End updates
[_tableView endUpdates];
}
Я попытался воспроизвести проблему с помощью небольшого образца кода, и у меня такая же проблема, представление контроллера представления освобождается только тогда, когда я не возвращаю непосредственно представление контроллера представления.
Кто-нибудь может мне помочь?