1

ビューベースの 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
4

1 に答える 1

2

何が起こっているのかを確認するためにテストプロジェクトを作成しました。

ブレークポイントをオンにするapplicationDidFinishLaunchingと、通知が受信される前にメソッドが呼び出されるnumberOfRowsInTableViewことがわかります。numberOfRowsInTableViewapplicationDidFinishLaunching

したがって、配列が作成される前に配列を要求しています。

通常、これが発生する別のクラスがあり、そのクラスが初期化されたときに配列を設定するため、これは発生しません。

于 2012-10-26T16:00:59.823 に答える