0

最初のウィンドウのボタンが押されたときに結果を表示するために 2 番目のウィンドウが開かれる OSX アプリを作成しています。window-2 は正常に起動し、必要なものが表示されます。しかし、window-1 で入力を変更して再度アクション ボタンを押すと、window-2 は結果を更新しません。

ここで私の質問:

  1. window-1 で入力が変更された後、window-2 の内容はどのように更新されますか
  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]; 

}

resultarrayarraycontrollerResultWindowController.xib 内ののコンテンツ ソースです。はarraycontroller、配列の内容を表示することになっているテーブル ビューにバインドされています。これは 2 回目以降は更新されません。

4

1 に答える 1

0

私はあなたが単に次のことをしなければならないと信じています:

- (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 setValueArray:[toDoItemArrayController arrangedObjects]];
        [rwc setNumberOfCalculations:[NSNumber numberWithInt:[_inputNumberOfCalculations intValue]]];
        [rwc calculateResults]; //starts method in 2nd-window controller for result 
    [rwc showWindow:self]; 
}

ResultWindowControllerの値は、存在しない場合にのみ変更していました。新しいインスタンスを開始するのではなく、何があっても値を変更したい。したがって、[[alloc] init]を使用しない限り、問題はありません。

お役に立てば幸いです。他に何か必要な場合は、コメントをドロップしてください。

編集

tableViewのプロパティを作成するには、次のようにします。

.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;
@property (assign) NSTableView *yourTableView;   //Add this code
-(void)calculateResults;

@end

そしてここにResultWindowController.m

#import "ResultWindowController.h"
#import "ResultItem.h" //Your result model

@implementation ResultWindowController
@synthesize valueArray, resultArray, numberOfCalculations;
@synthesize yourTableView;  //Add this code

その後、あなたは呼び出すことができるはずです[yourTableView reloadData]

于 2013-01-15T21:22:05.193 に答える