最初のウィンドウのボタンが押されたときに結果を表示するために 2 番目のウィンドウが開かれる OSX アプリを作成しています。window-2 は正常に起動し、必要なものが表示されます。しかし、window-1 で入力を変更して再度アクション ボタンを押すと、window-2 は結果を更新しません。
ここで私の質問:
- window-1 で入力が変更された後、window-2 の内容はどのように更新されますか
- window-2 を閉じて解放する方法 (現在、アクション ボタンをもう一度押すと、閉じる前に window-2 が同じ内容で表示されます)
アクションボタンのコードは次のとおりです。
- (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];
}
簡単かもしれませんが、常に別の ResultWindowController インスタンスを作成することを恐れています。
前もって感謝します。ヨルグ
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
arraycontroller
ResultWindowController.xib 内ののコンテンツ ソースです。はarraycontroller
、配列の内容を表示することになっているテーブル ビューにバインドされています。これは 2 回目以降は更新されません。