Objective c osx,使tableview可重新加载
我还有一个简单的问题,我自己解决不了。我有两个XIB。main.xib用于用户输入,result.xib用于结果。按下输入xib上的按钮时,Xib2启动。 按钮操作(在AppDelegate.m中):Objective c osx,使tableview可重新加载,objective-c,macos,tableview,nsarraycontroller,reloaddata,Objective C,Macos,Tableview,Nsarraycontroller,Reloaddata,我还有一个简单的问题,我自己解决不了。我有两个XIB。main.xib用于用户输入,result.xib用于结果。按下输入xib上的按钮时,Xib2启动。 按钮操作(在AppDelegate.m中): rwc是一个执行计算并显示结果的窗口控制器。xib(ResultWindow): ResultWindowController.h: #import <Cocoa/Cocoa.h> @interface ResultWindowController : NSWindowControl
rwc
是一个执行计算并显示结果的窗口控制器。xib(ResultWindow
):
ResultWindowController.h:
#import <Cocoa/Cocoa.h>
@interface ResultWindowController : NSWindowController{
NSArray *valueArray;
NSMutableArray *resultArray;
NSNumber *numberOfCalculations;
}
@property (nonatomic, retain, readwrite) NSArray *valueArray;
@property (retain) NSNumber *numberOfCalculations;
@property (nonatomic, retain, readwrite) NSMutableArray *resultArray;
-(void)calculateResults;
@end
结果将放在模型对象中,并在resultArray
中收集。
现在它将变得有趣(至少对我来说):
resultArray
通过BindingInspector作为内容绑定到NSArrayController
NSArrayController
是结果的一部分。xib
result.xib有一个表视图
(没有自己的类或viewcontroller)
tableview
列通过resultArray中使用的键值绑定到NSArrayController
当result.xib窗口启动时,一切都很正常。tableview
按预期显示内容。但是当我在input.xib上进行更改并再次按下操作按钮时,result.xib上的tableview
不会更新。
我检查了resultArray
内容(通过NSLog),它得到了所有新值,因此工作正常
我的问题在哪里
我读了很多[tableView reloadData]
,但我不知道如何实际设置代码和必要的绑定。与其将对象添加到数组中,不如将IBOutlet添加到数组控制器中,然后使用addObject:
方法将对象添加到表视图中。您好MateurProgrammer,您的意思是我需要更改[resultArray addObject:newResult][Resultarray控制器添加对象:newResult]中的code>编码>并在控制器中创建插座
?
#import <Cocoa/Cocoa.h>
@interface ResultWindowController : NSWindowController{
NSArray *valueArray;
NSMutableArray *resultArray;
NSNumber *numberOfCalculations;
}
@property (nonatomic, retain, readwrite) NSArray *valueArray;
@property (retain) NSNumber *numberOfCalculations;
@property (nonatomic, retain, readwrite) NSMutableArray *resultArray;
-(void)calculateResults;
@end
#import "ResultWindowController.h"
#import "ResultItem.h" //my result model
@implementation ResultWindowController
@synthesize valueArray, resultArray, numberOfCalculations;
- (id)init
{
if(![super initWithWindowNibName:@"ResultWindow"])
return nil;
return self;
}
-(void)awakeFromNib
{
}
- (void)windowDidLoad
{
[super windowDidLoad];
}
- (void)calculateResults
{
//a lot of calculation code ...
ResultItem *newResult = [[ResultItem alloc]init];
[newResult setValue:[nameArray objectAtIndex:i] forKey:@"name"];
[newResult setValue:[NSNumber numberWithDouble:avg] forKey:@"averageValue"];
[newResult setValue:[NSNumber numberWithDouble:min] forKey:@"minValue"];
[newResult setValue:[NSNumber numberWithDouble:max] forKey:@"maxValue"];
[newResult setValue:dimensionRandomArray forKey:@"randomArray"];
[resultArray addObject:newResult];
}