带源的NSTableView导致EXC_BAD_ACCESS

时间:2014-06-19 16:38:13

标签: objective-c cocoa plist exc-bad-access 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)";
    }
}

settingsPlist 填充了plist的内容,如下所示:

<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 个答案:

答案 0 :(得分:1)

你在这里完成了发布,

    NSString *title = [[NSString stringWithString:[[aTableColumn headerCell] stringValue]] autorelease];

-[NSString stringWithString:]已自动释放返回的值,因此您无需再次调用它。