0

自分では解決できない簡単な質問がもう 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。今、それは面白くなるでしょう(少なくとも私にとっては):

  1. これresultArrayはコンテンツとしてNSArrayControllerBindingInspector 経由でバインドされます
  2. これNSArrayControllerはresult.xibの一部です
  3. result.xibにはtableview(独自のクラスまたはビューコントローラーなし)があります
  4. tableviewNSArrayControllerは 、resultArray

result.xib ウィンドウが起動すると、すべてが正常に機能します。は、期待どおりのtableview内容を示しています。しかし!input.xib を変更してアクション ボタンをもう一度押すとtableview、result.xib が更新されません。resultArray(NSLog 経由で) 内容を確認したところ、すべての新しい値が取得されるため、正常に動作します。

私の問題はどこにありますか?

私は多くのことを読みましたが[tableView reloadData]、コードとそれに必要なバインディングを実際にセットアップする方法がわかりません。

4

1 に答える 1

0

オブジェクトを配列に追加する代わりに、IBOutlet を配列コントローラーに作成し、メソッドaddObject:を使用してオブジェクトをテーブル ビューに追加します。

于 2013-01-17T23:57:53.987 に答える