未调用numberOfRowsInTableView

时间:2012-10-26 15:42:31

标签: xcode methods nstableview

我正在设置基于视图的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

1 个答案:

答案 0 :(得分:2)

我刚做了一个测试项目,看看发生了什么。

如果您在applicationDidFinishLaunching以及numberOfRowsInTableView上设置了断点,则会在收到numberOfRowsInTableView通知之前看到applicationDidFinishLaunching方法被调用。

所以你要在数组填充之前要求它。

通常情况下,你会有一个单独的类发生这种情况,并在初始化该类时设置数组,所以这不会发生。