objective-c - NStableview setDatasource EXC_BAD_ACCESS

标签 objective-c cocoa nstableview

我正在尝试使用 NSarray 使用 NSTableView 创建一个简单的菜单。当我将数据源设置为我创建的类时,出现 EXC_BAD_ACCESS 错误。奇怪的是,它在 macruby 中有效吗? 实现文件:

@implementation TableArray

- (id) init
{
    self = [super init];
    if(self) {
        arr = [NSArray arrayWithObjects:@"hey", @"what", @"there", nil];
    }
    return self;
}

- (NSInteger) numberOfRowsInTableView:(NSTableView *)tableView 
{
    return [arr count];
}

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn      *)aTableColumn row:(NSInteger)rowIndex
{
    return [arr objectAtIndex:rowIndex];
}

@end

标题:

@interface TableArray: NSObject <NSTableViewDataSource> {
   NSArray *arr;    
} 

- (NSInteger) numberOfRowsInTableView:(NSTableView *)tableView;
- (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn  *)aTableColumn row:(NSInteger)rowIndex;
@end

在应用委托(delegate)中:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    TableArray *arr = [[TableArray alloc] init];
    [tv setDataSource:arr];
    [tv reloadData];
}

委托(delegate) header :

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate> {
   IBOutlet NSTableView *tv;
}

@property (assign) IBOutlet NSWindow *window;

@end

最佳答案

我敢打赌您启用了 ARC(可能是 GC)。 NSTableView 维护对其数据源的弱引用,而你没有维护对其的强引用,因此 ARC 在你完成之前释放你的数据源。

请注意,数据源像这样 float 是非常罕见的。它几乎肯定是应用程序控制层的一部分,因为数据源是表和底层数据存储之间的管道。

它可能在 MacRuby 下工作,因为代码略有不同或因为实现细节。

关于objective-c - NStableview setDatasource EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14309685/

相关文章:

ios - 如何防止触摸通过 UIImageView?

objective-c - RestKit 对象映射 : difficulty using setObjectMapping:forResourcePathPattern:withFetchRequestBlock

ios - 基本三角形着色器不渲染

iphone - 禁用 UIAlertView 按钮会让我的应用程序被拒绝吗?

macos - 基于 View 的 NSTableView 是否可以在行边界之外绘制?

iphone - `[super viewDidLoad]` 约定

iphone - NSIncation 将 C 数组传递给 Objective-C 方法

swift - 以编程方式更改 NSSplitViewController 中的 View

objective-c - 如何通过从 NSTableView 中选择一行来创建操作

xcode - OS X 应用程序中的 NSTableView 选择