0

objectValueForTableColumnで行を選択すると、 で例外が発生します。NSTableViewこれは を超えていnumberOfRowsInTableViewます。

これは単一のメソッドを使用して複数のテーブル ビューを制御することが原因である可能性があると思いますが、代わりに何をすべきかわかりません。

は次のnumberOfRowsInTableViewようになります。

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

        case 1:
            return [categoryMutableArray count];
            break;

        case 2:
            return [peopleMutableArray count];
            break;

...

メソッドは次のようになりobjectValueForTableColumnます。

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
)
4

1 に答える 1

1

私の提案は、デバッガーに移動して例外のブレークポイントを設定し、アプリが終了する前に変数を確認することです。

例外のブレークポイントを設定するには、デバッガー ビューに切り替えて、左下隅にある "+" 記号をクリックします。これにより、例外ブレークポイントまたはシンボリック ブレークポイントを選択できるメニューが表示されます。

一方、クラッシュ ログはデバッガとは異なる情報を提供します。それでも、スタック トレースを読めば、クラッシュが発生していることがわかるtableViewSelectionDidChange:ので、最初にそこを調べた方が適切かもしれません。

于 2013-06-18T15:15:52.263 に答える