【发布时间】:2010-02-22 09:10:34
【问题描述】:
我正在学习 Cocoa,但遇到了一个问题:我想通过绑定将 NSMutableArray 的内容绑定到 NSTableView。我阅读了很多关于它们的文档,但我无法让它们工作(我的表格中没有显示任何内容)。
以下是事实:
我创建了一个名为MTMTask 的简单模型,其中包含两个属性priority 和text:
MTMTask.h
@interface MTMTask : NSObject {
NSString *priority;
NSString *text;
}
@property(copy) NSString* priority;
@property(copy) NSString* text;
- (id) initWithPriority :(NSString*)newPriority andText:(NSString*)newText;
@end
MTMTask.m
#import "MTMTask.h"
@implementation MTMTask
@synthesize text, priority;
- (id) initWithPriority:(NSString *)newPriority andText:(NSString *)newText {
if (self = [super init]) {
priority = newPriority;
text = newText;
return self;
}
return nil;
}
@end
然后我创建了 MTMTaskController :
MTMTaskController.h
#import <Cocoa/Cocoa.h>
#import "MTMTask.h"
@interface MTMTaskController : NSObject {
NSMutableArray *_tasksList;
}
- (NSMutableArray *) tasksList;
@end
MTMTaskController.m
#import "MTMTaskController.h"
@implementation MTMTaskController
- (void) awakeFromNib
{
MTMTask *task1 = [[MTMTask alloc] initWithPriority:@"high" andText:@"Feed the hungry cat"];
MTMTask *task2 = [[MTMTask alloc] initWithPriority:@"low" andText:@"Visit my family"];
_tasksList = [[NSMutableArray alloc] initWithObjects:task1, task2, nil];
}
- (NSMutableArray*) tasksList
{
return _tasksList;
}
@end
最后我编辑了 MainMenu.xib:我添加了一个 NSObject 并将其类设置为 MTMTaskController。然后我添加了一个名为TasksListController 的NSArrayController,它的内容出口绑定到MTMTaskController.tasksList。我还将其模式设置为Class 和类名MTMTask。我将NSTableView 的两列的value 出口绑定到TasksListController 文本和优先级。
但是当我运行程序时,它并没有真正成功:表格中没有显示任何内容。
您对我的问题有任何想法吗?我想我错过了一些东西,但我不知道是什么。
提前致谢!
【问题讨论】:
-
您是否设置了断点以确保控制器和对象实际上正在被创建?您可能忘记将控制器作为对象添加到 xib 文件中,在这种情况下,
awakeFromNib将不会被调用。 -
刚试过:我在
awakeFromNib里放了一个NSLog()调用,在控制台中显示出来了。看起来问题不存在。
标签: cocoa nsarray cocoa-bindings