0

我对 Cocoa 很陌生,我正在尝试设置一个由数组支持的表格视图。我已经将应用程序委托设置为 tableview 的数据源,并实现了NSTableViewDataSource协议。

当我运行应用程序时,我得到以下日志输出:

2012-06-23 18:25:17.312 HelloWorldDesktop[315:903] 待办事项列表为零
2012-06-23 18:25:17.314 HelloWorldDesktop[315:903] 行数为 0
2012-06-23 18:25 :17.427 HelloWorldDesktop[315:903] 应用程序确实完成启动

我以为当我调用reloadDatatableView 时,它会numberOfRowsInTableView:(NSTableView *)tableView再次调用来刷新视图,但这似乎并没有发生。我错过了什么?

我的 .h 和 .m 列表如下。

AppDelegate.h

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate, NSTableViewDataSource> 

@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet NSTableView * toDoListTableView;

@property (assign) NSArray * toDoList;

@end

AppDelegate.m

#import "AppDelegate.h"

@implementation AppDelegate 

@synthesize window = _window;
@synthesize toDoList; 
@synthesize toDoListTableView;

- (void)dealloc
{
    [self.toDoList dealloc];
    [super dealloc];
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSLog(@"App did finish launching");
    // Insert code here to initialize your application
  //  toDoList = [[NSMutableArray alloc] init];
    toDoList = [[NSMutableArray alloc] initWithObjects:@"item 1", @"item 2", nil];
    [self.toDoListTableView reloadData];
   // NSLog(@"table view %@", self.toDoListTableView);

}

//check toDoList initialised before we try and return the size
- (NSInteger) numberOfRowsInTableView:(NSTableView *)tableView {
    NSInteger count = 0;
    if(self.toDoList){
        count = [toDoList count];
    } else{
        NSLog(@"to do list is nil");
    }
    NSLog(@"Number of rows is %ld", count);
    return count;
}

-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    NSLog(@"in objectValueForTable");
    id returnVal = nil;

    NSString * colId = [tableColumn identifier];

    NSString * item = [self.toDoList objectAtIndex:row];

    if([colId isEqualToString:@"toDoCol"]){
        returnVal = item;
    } 

    return returnVal;

}

@end
4

2 回答 2

1

我要检查的第一件事是您的 NSTableView IBOutlet 仍设置在 applicationDidFinishLaunching 中。

NSLog(@"self.toDoListTableView: %@", self.toDoListTableView)

您应该看到如下输出:

<NSTableView: 0x178941a60>

如果插座设置正确。

如果您看到“nil”而不是对象,请仔细检查以确保您的 NSTableView 在 Xcode 的 XIB 编辑模式下连接到您的插座。这是帮助连接插座的文档链接

于 2012-06-23T17:43:22.940 回答
0

我修复了它 - 我将 appDelegate 设置为数据源和 tableView 的委托,但 ctrl-drag 从 tableView 到 appDelegate,但我没有 ctrl-拖动另一种方式来实际链接我要的插座用表视图声明。它现在正在工作。感谢您的帮助,尽管杰夫。

于 2012-06-23T18:17:08.963 回答