我正在设置基于视图的NSTableView,但是没有调用方法numberOfRowsInTableView。当我检查它是否被调用时,日志返回nil。
我已经设置了我的AppDelegate以符合数据源和委托协议,并通过IB将它们连接到AppDelegate。当应用程序完成加载时,我的数组将提供表格。
我的代码如下:
接口
#import <Cocoa/Cocoa.h>
@interface RLTAppDelegate : NSObject <NSApplicationDelegate, NSTableViewDataSource, NSTableViewDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSTableView *tableView;
@property (copy) NSArray *nameArray;
@end
实施
#import "RLTAppDelegate.h"
@implementation RLTAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
self.nameArray = [[NSArray alloc] initWithObjects:@"Ryan", nil];
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return [self.nameArray count];
NSLog(@"%lu", self.nameArray.count);
}
- (NSView *)tableView:(NSTableView *)tableView
viewForTableColumn:(NSTableColumn *)tableColumn
row:(NSInteger)row {
NSTextField *result = [tableView makeViewWithIdentifier:@"name" owner:self];
result.stringValue = [self.nameArray objectAtIndex:row];
return result;
}
@end
答案 0 :(得分:2)
我刚做了一个测试项目,看看发生了什么。
如果您在applicationDidFinishLaunching
以及numberOfRowsInTableView
上设置了断点,则会在收到numberOfRowsInTableView
通知之前看到applicationDidFinishLaunching
方法被调用。
所以你要在数组填充之前要求它。
通常情况下,你会有一个单独的类发生这种情况,并在初始化该类时设置数组,所以这不会发生。