osx,使tableview可重新加载

时间:2013-01-17 23:27:33

标签: objective-c macos tableview nsarraycontroller reloaddata

我有另一个我自己无法解决的简单问题。我有两个xib。用户输入的main.xib和结果的result.xib。在input-xib上按下按钮时,Xib2启动。 按钮操作(在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):

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

ResultWindowController.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. resultArray通过BindingInspector绑定为NSArrayController的内容
  2. NSArrayController是result.xib
  3. 的一部分
  4. result.xib有tableview(没有自己的类或viewcontroller)
  5. tableview列通过NSArrayController
  6. 中使用的键值绑定到resultArray

    当result.xib窗口启动时,一切正常。 tableview按预期显示内容。但!当我在input.xib上进行更改并再次按下操作按钮时,result.xib上的tableview不会更新。 我检查了resultArray内容(通过NSLog)并获得了所有新值,因此工作正常。

    我的问题出在哪里?

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

1 个答案:

答案 0 :(得分:0)

不是将对象添加到数组中,而是将IBOutlet创建到数组控制器,并使用方法addObject:将对象添加到表视图中。