메뉴 항목을 클릭하면 NSTableView가 포함 된 간단한 응용 프로그램을 개발하려고합니다. 문제는 NSTableView가 데이터를 표시 한 직후에 앱이 충돌한다는 것입니다. 전체 스택 추적 : 나는 ARC를 사용하고 있기 때문에코코아, 컨트롤러 인스턴스화 및 충돌
* thread #1: tid = 0x2107, 0x00007fff943bce90 libobjc.A.dylib\`objc_msgSend + 16,
stop reason = EXC_BAD_ACCESS (code=13, address=0x0)
frame #0: 0x00007fff943bce90 libobjc.A.dylib`objc_msgSend + 16
, 내가 어떤 참조 카운팅 문제를 제외해야합니다; 하지만 어쩌면 내가 나쁜 방법으로 컨트롤러를 (창을 만드는 데 필요한) 만들고있어, 그것은 실수로 free'd되고있어.
가- (IBAction)showPreferences:(id)sender {
if(!preferencesWindow) {
preferencesWindow = [[[PreferencesWindowController alloc]
initWithWindowNibName:@"PreferencesWindow"] window];
}
[preferencesWindow makeKeyAndOrderFront:sender];
}
PreferencesWindowController이 코드합니다 (NSTableView는 필요한) 데이터 소스 프로토콜을 구현
이
만들고 창을 표시 AppController가의 코드이다.- (int)numberOfRowsInTableView:(NSTableView *)tabView {
return 1;
}
- (id)tableView:(NSTableView *)tabView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row {
NSString *val = [NSString stringWithFormat:@"%@[%d]", [tableColumn identifier], row];
return val;
}
크래시 그 자체가 원인이 아닙니다. 그러나 NSTableView의 dataSource에서 PreferencesWindowController를 제거하면 충돌이 발생하지 않으므로 다소 관련이 있습니다.
어디서 실수입니까?
편집 :
을 어쨌든, 스택 I 쓴 코드 밖에 : 좀비 프리셋과 프로파일 (인스트루먼트)를 사용하여, I는 그 기준 카운터 네거티브 진행 객체가있을 알 수있다. 나는 거기에 중단 점을 둘 수 없다. 그리고 나는 두 번 공개되는 대상이 무엇인지를 볼 수 없다. (또는 내가 어떻게 해야할지 모르겠다.)
감사합니다. 그게 문제였습니다! 나는 (윈도우 컨트롤러, 실제로) 읽기 전용 게으른 로딩 속성에 넣었다. – fferri
@mescalinum 굉장! 다행이 당신을 위해 일 했어. – Vervious