#objective-c #cocoa #plist #exc-bad-access #nstableview
#objective-c #какао #список #исключение -плохой доступ #nstableview
Вопрос:
Хотя я знаком с кучей языков программирования, я уже некоторое время не могу привыкнуть к Cocoa / Objective-C.
Я хотел заполнить NSTableView некоторым содержимым, используя следующий код:
- (int) numberOfRowsInTableView:(NSTableView *)aTableView {
return (int)[settingsPlist count];}
- (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex {
NSString *title = [[NSString stringWithString:[[aTableColumn headerCell] stringValue]] autorelease];
NSLog(title); // debug
NSLog(@"%i",rowIndex); // debug
if([title isEqual: @"Plugin Name"]) {
return [[settingsPlist objectForKey:[NSString stringWithFormat:@"%i",rowIndex]] objectForKey:@"name"];
} else {
return @"(n/a)";
}
}
Список настроек заполняется содержимым списка, выглядит следующим образом:
<plist version="1.0">
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>Test-Plugin</string>
<key>version</key>
<string>0.1</string>
<key>type</key>
<string>Car</string>
<key>creator</key>
<string>Icke</string>
<key>checksum</key>
<string>0x32</string>
<key>link</key>
<string>http://</string>
</dict>
</dict>
Проблема: он отлично работает для одной строки (вы можете определить, посмотрев на вывод консоли, вызванный NSLog(title);
и NSLog(rowIndex);
), однако после этого отладчик останавливает выполнение, вызывая EXC_BAD_ACCESS . Я знаю, что это значит, но я не знаю, почему я это получаю и как это исправить.
Спасибо за любую помощь. 🙂
Комментарии:
1. Знаете ли вы, что такое ARC, и почему вы его не используете? Objective-C, возможно, уже решил эту проблему для вас.
Ответ №1:
вы закончили выпуск здесь,
NSString *title = [[NSString stringWithString:[[aTableColumn headerCell] stringValue]] autorelease];
-[NSString stringWithString:]
возвращаемое значение уже автоматически возвращено, поэтому вам не нужно было вызывать его снова.