0

我还有一个简单的问题,我自己无法解决。我有两个xib。main.xib 用于用户输入,result.xib 用于结果。Xib2 在 input-xib 上按下按钮时启动。按钮操作(在 AppDelegate.m 中):

- (IBAction)pushRun:(id)sender {

    if (!rwc)
    {
        rwc = [[ResultWindowController alloc] init];
    }
    [rwc setValueArray:[toDoItemArrayController arrangedObjects]];
    [rwc setNumberOfCalculations:[NSNumber numberWithInt:[_inputNumberOfCalculations intValue]]];
    [rwc calculateResults]; //starts method in 2nd-window controller for result calculation

    [rwc showWindow:self]; 
}

rwcWindowController进行计算并显示 result.xib ( ResultWindow):

结果窗口控制器.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

结果窗口控制器.m:

#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]; 

}

结果被放入模型对象并收集在resultArray. 现在它会变得有趣(至少对我来说):

  1. 通过BindingInspectorresultArray作为内容绑定到NSArrayController
  2. NSArrayController是 result.xib 的一部分
  3. result.xib 有一个tableview(没有自己的类或视图控制器)
  4. tableview绑定到中NSArrayController使用的通过键值 resultArray

当 result.xib 窗口启动时,一切正常。tableview按预期显示内容。但!当我对 input.xib 进行更改并再次按下操作按钮时tableview,结果.xib 没有更新。我检查了resultArray内容(通过 NSLog),它得到了所有的新值,所以工作正常。

我的问题在哪里?

我读了很多,[tableView reloadData]但我不知道如何实际设置代码和必要的绑定。

4

1 回答 1

0

不要将对象添加到数组中,而是将 IBOutlet 添加到数组控制器中,然后使用该方法addObject:将对象添加到表视图中。

于 2013-01-17T23:57:53.987 回答