Objective c OSX-使用多个表视图-如何检查单元格越界

Objective c OSX-使用多个表视图-如何检查单元格越界,objective-c,cocoa,osx-mountain-lion,nstableview,Objective C,Cocoa,Osx Mountain Lion,Nstableview,在NSTableView中选择一行时,我在ObjectValueforTable列中遇到异常,超出了numberOfRowsInTableView 我认为这可能是由于使用单个方法控制多个表视图造成的,但我不知道该怎么做 numberOfRowsInTableView如下所示: switch (tableView.tag) { case 0: return [itemMutableArray count]; break;

NSTableView
中选择一行时,我在
ObjectValueforTable列
中遇到异常,超出了
numberOfRowsInTableView

我认为这可能是由于使用单个方法控制多个表视图造成的,但我不知道该怎么做

numberOfRowsInTableView
如下所示:

    switch (tableView.tag) {
        case 0:
            return [itemMutableArray count];
            break;

        case 1:
            return [categoryMutableArray count];
            break;

        case 2:
            return [peopleMutableArray count];
            break;

...
if (tableView.tag == 0) {
    currentItem = [itemMutableArray objectAtIndex:row];
    NSString *itemName = [currentItem valueForKey:@"title"];
    return itemName;        
}

if (tableView.tag == 1) {
    currentCategory  = [categoryMutableArray objectAtIndex:row];
    NSString *catName = [currentCategory valueForKey:@"name"];
    return catName;
}
objectValueForTableColumn
方法如下所示:

    switch (tableView.tag) {
        case 0:
            return [itemMutableArray count];
            break;

        case 1:
            return [categoryMutableArray count];
            break;

        case 2:
            return [peopleMutableArray count];
            break;

...
if (tableView.tag == 0) {
    currentItem = [itemMutableArray objectAtIndex:row];
    NSString *itemName = [currentItem valueForKey:@"title"];
    return itemName;        
}

if (tableView.tag == 1) {
    currentCategory  = [categoryMutableArray objectAtIndex:row];
    NSString *catName = [currentCategory valueForKey:@"name"];
    return catName;
}
如果我先点击出界,没问题。但当我单击一行,然后单击“超出边界”时,我会得到以下日志:

2013-06-18 13:40:16.169 TestApp[43953:303] -[MainWindowController tableViewSelectionDidChange:]
2013-06-18 13:40:16.169 TestApp[43953:303] Items Table View
2013-06-18 13:40:17.641 TestApp[43953:303] -[MainWindowController tableViewSelectionDidChange:]
2013-06-18 13:40:17.641 TestApp[43953:303] Items Table View
2013-06-18 13:40:17.642 TestApp[43953:303] *** -[__NSArrayM objectAtIndex:]: index 18446744073709551615 beyond bounds [0 .. 6]
2013-06-18 13:40:17.643 TestApp[43953:303] (
    0   CoreFoundation                      0x00007fff8574e8ce __exceptionPreprocess + 174
    1   libobjc.A.dylib                     0x00007fff8b4e7f51 objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff856ea615 -[__NSArrayM objectAtIndex:] + 245
    3   TestApp                      0x0000000100007508 -[MainWindowController tableViewSelectionDidChange:] + 760
    4   CoreFoundation                      0x00007fff856ffa63 _CFXNotificationPost + 3203
    5   Foundation                          0x00007fff8d25c24a -[NSNotificationCenter postNotificationName:object:userInfo:] + 68
    6   AppKit                              0x00007fff8f7fdfc5 -[NSTableView _sendSelectionChangedNotificationForRows:columns:] + 177
    7   AppKit                              0x00007fff8f7e3f2a -[NSTableView _enableSelectionPostingAndPost] + 406
    8   AppKit                              0x00007fff8fbbc7e0 -[NSTableView mouseDown:] + 5588
    9   AppKit                              0x00007fff8f780918 -[NSWindow sendEvent:] + 11303
    10  AppKit                              0x00007fff8f77af48 -[NSApplication sendEvent:] + 2021
    11  AppKit                              0x00007fff8f69c599 -[NSApplication run] + 646
    12  AppKit                              0x00007fff8f646563 NSApplicationMain + 940
    13  TestApp                      0x0000000100015982 main + 34
    14  libdyld.dylib                       0x00007fff8f28e60d start + 1
)

我的建议是转到调试器并为异常设置断点,然后在应用程序死亡之前查看变量

要为异常设置断点,请切换到debugger视图并单击左下角的“+”符号。这将为您提供一个菜单,可以选择异常断点或符号断点


另一方面,与调试器相比,崩溃日志提供了不同的信息。但即便如此,如果您阅读堆栈跟踪,您可以看到崩溃发生在
tableViewSelectionDidChange:
中,因此,首先查看可能更相关。

您好,谢谢您的评论。我在我的问题中添加了一个日志。对不起,我必须听消息才能理解,我没有抓住要点。除非人们认为这是错误的,否则我会重新考虑我的架构,为每个视图创建单独的视图控制器。否则,我就把自己束缚得太深了@Monolo,你的评论让我找到了正确的方法,这非常有帮助。如果你想写下你的建议作为答案,我会接受它。接受你的建议并将其作为答案发布。我还将删除我在这里的评论部分,以帮助清理页面。。。