私は前もってお詫びしますが、私はこれを理解しようとしています。私は今までセルベースのテーブルをかなり広く使用してきましたが、このビューベースのタイプでは何の問題もなかったことはありません。NSTableView ViewBasedクラッシュ
私は管理対象オブジェクトのリストを持つアレイコントローラを持っています。それらはテーブルの内容にバインドされ、オブジェクトの名前は(objectValue.nameを使用して)テーブルのセルビューにバインドされます。
アレイコントローラのオブジェクトを保持するローカルアレイがあります。それは保持されます。
テーブルのデリゲートをビューコントローラに設定しました。 Appleのドキュメントで説明されている@ "MyView"識別子を設定しました。
これは私が問題を抱えているこれでコードが...
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
NSTableCellView *result = [tableView makeViewWithIdentifier:@"MyView" owner:self];
// Set the stringValue of the cell's text field to the nameArray value at row
result.textField.stringValue = [[localArray objectAtIndex:row] valueForKey:@"name"];
return result;
私は「結果」がnilでないと、配列から返された値がnilではないことがわかります。それでも、result.textField.stringValue行が実行されると、私は "EXC_BAD_INSTRUCTION"を取得します。私がデータソースとしてビューコントローラを使用するかどうかにかかわらず、何の違いもないようです。任意のアイデアをいただければ幸いです。ありがとうございました。
0x7fff841f13e1 <+0>: pushq %rbp
0x7fff841f13e2 <+1>: movq %rsp, %rbp
0x7fff841f13e5 <+4>: pushq %r14
0x7fff841f13e7 <+6>: pushq %rbx
0x7fff841f13e8 <+7>: movq %rdx, %rbx
0x7fff841f13eb <+10>: movq 0x1cfe882e(%rip), %rsi ; "description"
0x7fff841f13f2 <+17>: movq 0x1cd17d5f(%rip), %r14 ; (void *)0x00007fff9b66e000: objc_msgSend
0x7fff841f13f9 <+24>: movq %rbx, %rdi
0x7fff841f13fc <+27>: callq *%r14
0x7fff841f13ff <+30>: movq %rax, %rcx
0x7fff841f1402 <+33>: leaq 0x1cd65977(%rip), %rdi ; @"Crashing on exception: %@"
0x7fff841f1409 <+40>: xorl %eax, %eax
0x7fff841f140b <+42>: movq %rcx, %rsi
0x7fff841f140e <+45>: callq 0x7fff8401d97b ; _NSNoteInCrashReports
0x7fff841f1413 <+50>: movq 0x1cfea3a6(%rip), %rsi ; "callStackSymbols"
0x7fff841f141a <+57>: movq %rbx, %rdi
0x7fff841f141d <+60>: callq *%r14
0x7fff841f1420 <+63>: movq 0x1cfeb951(%rip), %rsi ;
"componentsJoinedByString:"
0x7fff841f1427 <+70>: leaq 0x1cd61e12(%rip), %rdx ; @"'\n'"
0x7fff841f142e <+77>: movq %rax, %rdi
0x7fff841f1431 <+80>: callq *0x1cd17d21(%rip) ; (void *)0x00007fff9b66e000: objc_msgSend
0x7fff841f1437 <+86>: movq 0x1cfeaa9a(%rip), %rsi ; "UTF8String"
0x7fff841f143e <+93>: movq %rax, %rdi
0x7fff841f1441 <+96>: callq *0x1cd17d11(%rip) ; (void *)0x00007fff9b66e000: objc_msgSend
0x7fff841f1447 <+102>: movq %rax, 0x1d05a372(%rip) ; gCRAnnotations + 24
-> 0x7fff841f144e <+109>: ud2
0x7fff841f1450 <+111>: movq %rax, %rdi
0x7fff841f1453 <+114>: callq 0x7fff849f0c86 ; symbol stub for: objc_begin_catch
0x7fff841f1458 <+119>: xorl %edi, %edi
0x7fff841f145a <+121>: xorl %esi, %esi
0x7fff841f145c <+123>: xorl %eax, %eax
0x7fff841f145e <+125>: callq 0x7fff8401d97b ; _NSNoteInCrashReports
0x7fff841f1463 <+130>: callq 0x7fff849f0caa ; symbol stub for: objc_exception_rethrow
0x7fff841f1468 <+135>: movq %rax, %rbx
0x7fff841f146b <+138>: callq 0x7fff849f0c9e ; symbol stub for: objc_end_catch
0x7fff841f1470 <+143>: movq %rbx, %rdi
0x7fff841f1473 <+146>: callq 0x7fff849f06d4 ; symbol stub for: _Unwind_Resume
0x7fff841f1478 <+151>: callq 0x7fff849f0d58 ; symbol stub for: objc_terminate
0x7fff841f147d <+156>: nop
0x7fff841f147e <+157>: nop
0x7fff841f147f <+158>: nop
テーブルの列は1つだけですか? –
クラッシュのスタックトレースを表示します。実際には、完全なクラッシュレポートを表示するのが最善の方法です。 –
**明示的にKVCが必要な理由を説明できない限り、 'valueForKey'を使用して辞書から単一の値を取得することは絶対に避けてください。専用のシンタックスは 'objectForKey'またはキーサブスクリプションです。' localArray [row] [@ "name"] ' – vadian