【发布时间】:2010-05-05 09:06:52
【问题描述】:
我有一个类控制一个窗口,另一个类控制同一个 xib 中的另一个窗口,但是,第二个窗口从不显示它应该显示的内容。
在第一个类中,我分配并初始化第二个类,然后将一些信息传递给它。在第二个类中,它在表格视图中显示该数据。
是的,在 .xib 中我已经正确设置了所有连接,我已经检查了四次。代码也是正确的,与连接相同,我已经检查了四次。
编辑:是的,数组中有数据,类是 NSObjects。
Edit2:我发现了问题。出于某种原因,数组中填充了内容,但它返回 0 作为计数。
编辑 9000:
代码如下:
答案.h
#import <Cocoa/Cocoa.h>
@interface MSAnswerView : NSObject {
IBOutlet NSWindow *window;
NSArray *User;
NSArray *Vote;
NSArray *Text;
IBOutlet NSTableView *view;
IBOutlet NSTableColumn *voteCount;
IBOutlet NSTableColumn *saidUser;
IBOutlet NSTextView *body;
}
-(void)setUpWithVoteCount:(NSArray *)array User:(NSArray *)user Text:(NSArray *)text;
@property (nonatomic, retain) NSWindow *window;
@property (nonatomic, retain) NSTableView *view;
@property (nonatomic, retain) NSTableColumn *voteCount;
@property (nonatomic, retain) NSTableColumn *saidUser;
@property (nonatomic, retain) NSTextView *body;
@end
.m
#import "MSAnswerView.h"
@implementation MSAnswerView
@synthesize view;
@synthesize voteCount;
@synthesize saidUser;
@synthesize body;
@synthesize window;
-(void)awakeFromNib
{
[view setTarget:self];
[view setDoubleAction:@selector(bodydata)];
[view reloadData];
}
-(void)setUpWithVoteCount:(NSArray *)array User:(NSArray *)user Text:(NSArray *)text
{
Vote = array;
User = user;
Text = text;
if (window.isVisible = YES) {
[view reloadData];
[view setNeedsDisplay];
}
}
-(int)numberOfRowsInTableView:(NSTableView *)aTable
{
return [User count];;
}
-(id)tableView:(NSTableView *)aTable objectValueForTableColumn:(NSTableColumn *)aCol row:(int)aRow
{
if (aCol == voteCount)
{
return [Vote objectAtIndex:aRow];
}
else if (aCol == saidUser)
{
return [User objectAtIndex:aRow];
}
else
{
return nil;
}
}
-(void)bodydata
{
int index = [view selectedRow];
[body setString:[Text objectAtIndex:index]];
}
@end
【问题讨论】:
-
盲人很难回答有关代码的问题。请发布 IB 的最小测试用例和屏幕截图。
-
这很简单。它是由您的程序中的错误引起的。您需要做的就是修复错误,您的程序将按预期运行。
-
我已经发布了代码。 setUp 方法在不同的类中被调用,并且确实将数据放入数组中。
-
用户、投票和文本字段是否应该是弱引用?为什么不
retain他们? -
我试过了,没用。
标签: cocoa class nstableview