我試圖用一個NSarray創建一個帶有NSTableView的簡單菜單。當我將數據源設置爲創建的類時,我得到了EXC_BAD_ACCESS錯誤。奇怪的是,它在macruby中工作? 實現文件:NStableview setDatasource EXC_BAD_ACCESS
@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
而在應用程序委託:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
TableArray *arr = [[TableArray alloc] init];
[tv setDataSource:arr];
[tv reloadData];
}
和委託方頭:
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate> {
IBOutlet NSTableView *tv;
}
@property (assign) IBOutlet NSWindow *window;
@end
您還沒有初始化電視,應該忽略沒有定位的消息。 –
tv是一個IBOutlet,用於在界面構建器中進行的tableview。我也有ARC啓用。程序崩潰是主要問題。 – user1975095
很確定發生的事情是這樣的:你實例化一個'TableArray',將其賦值爲'tv'的dataSource(這是一個弱屬性),然後,不存在對'arr'的強引用,所以它是釋放。保留'arr'來解決問題。 –