gpt4 book ai didi

objective-c - 初始化 NSTableView

转载 作者:行者123 更新时间:2023-12-03 17:57:34 27 4
gpt4 key购买 nike

我对 Cocoa 很陌生,我正在尝试设置一个由数组支持的 TableView 。我已将应用程序委托(delegate)设置为 TableView 的数据源,并实现了 NSTableViewDataSource 协议(protocol)。

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

2012-06-23 18:25:17.312 HelloWorldDesktop[315:903] to do list is nil
2012-06-23 18:25:17.314 HelloWorldDesktop[315:903] Number of rows is 0
2012-06-23 18:25:17.427 HelloWorldDesktop[315:903] App did finish launching

我以为当我在 tableView 上调用 reloadData 时,它会再次调用 numberOfRowsInTableView:(NSTableView *)tableView 来刷新 View ,但这似乎并不正在发生。我错过了什么?

我的 .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

最佳答案

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

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

您应该看到如下输出:

<NSTableView: 0x178941a60>

socket 是否设置正确。

如果您看到“nil”而不是对象,请仔细检查以确保您的 NSTableView 在 Xcode 的 XIB 编辑模式下连接到您的 socket 。这是 documentation link寻求连接 socket 的帮助。

关于objective-c - 初始化 NSTableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11171547/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com