自分では解決できない簡単な質問がもう 1 つあります。私は2つの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];
}
rwc
計算をWindowController
実行し、結果を表示しています.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
。今、それは面白くなるでしょう(少なくとも私にとっては):
- これ
resultArray
はコンテンツとしてNSArrayController
BindingInspector 経由でバインドされます - これ
NSArrayController
はresult.xibの一部です - result.xibには
tableview
(独自のクラスまたはビューコントローラーなし)があります tableview
列NSArrayController
は 、resultArray
result.xib ウィンドウが起動すると、すべてが正常に機能します。は、期待どおりのtableview
内容を示しています。しかし!input.xib を変更してアクション ボタンをもう一度押すとtableview
、result.xib が更新されません。resultArray
(NSLog 経由で) 内容を確認したところ、すべての新しい値が取得されるため、正常に動作します。
私の問題はどこにありますか?
私は多くのことを読みましたが[tableView reloadData]
、コードとそれに必要なバインディングを実際にセットアップする方法がわかりません。