我在为我拥有的 NSOutlineView 创建单独的 Controller 类时遇到问题。
我创建了一个名为的新类LTSidebarViewController
,并在我的 MainMenu.xib 文件中添加了一个对象到“工作台”并将其链接到我的LTSidebarViewController
类。我还将委托和数据源设置为链接到 MainMenu.xib 中的 NSOutlineView。
我要做的是- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
在我的 AppDelegate 文件中创建这个类的一个实例,当我这样做时,我想传入 App Delegate 的 managedObjectContext。所以,我创建了一个自定义init
方法,LTSidebarViewController
如下所示:
-(id)initWithManagedObject:(NSManagedObjectContext*)managedObject{
self = [super init];
if (self) {
self.managedObjectContext = managedObject;
NSFetchRequest *subjectsFetchReq = [[NSFetchRequest alloc]init];
[subjectsFetchReq setEntity:[NSEntityDescription entityForName:@"Subject"
inManagedObjectContext:self.managedObjectContext]];
subjectsArray = [self.managedObjectContext executeFetchRequest:subjectsFetchReq error:nil];
_topLevelItems = [NSArray arrayWithObjects:@"SUBJECTS", nil];
// The data is stored in a dictionary
_childrenDictionary = [NSMutableDictionary new];
[_childrenDictionary setObject:subjectsArray forKey:@"SUBJECTS"];
// The basic recipe for a sidebar
[_sidebarOutlineView sizeLastColumnToFit];
[_sidebarOutlineView reloadData];
[_sidebarOutlineView setFloatsGroupRows:NO];
// Set the row size of the tableview
[_sidebarOutlineView setRowSizeStyle:NSTableViewRowSizeStyleLarge];
// Expand all the root items; disable the expansion animation that normally happens
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:0];
[_sidebarOutlineView expandItem:nil expandChildren:YES];
[NSAnimationContext endGrouping];
// Automatically select first row
[_sidebarOutlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:1] byExtendingSelection:NO];
}
return self;
}
我也有这个类中所有必需的方法,- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item
等等。
在 App Delegate 的- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
方法中,我有以下内容:
LTSidebarViewController *sidebarViewController = [[LTSidebarViewController alloc] initWithManagedObject:self.managedObjectContext];
我的问题是这不起作用,我没有收到任何错误并且应用程序运行但 NSOutlineView 中没有显示任何数据。
现在从我可以看出的问题是,最初加载 MainMenu.xib 文件时,它会自动创建我的LTSidebarViewController
类的实例并调用它的 init 方法,但是因为我的 init 方法没有做任何事情,所以应用程序没有完成启动正确。
我在这里采取正确的方法吗?简单来说,我正在寻找一个单独的文件,用作我的 NSOutlineView 的数据源。