1

私のモデルクラスから配列を呼び出す方法はNSWindowController?はvalueArrayAppDelegateで、モデルクラスに設定されていますValueItem

@interface AppDelegate : NSObject <NSApplicationDelegate>
{
    ValueItem *vi;
    ResultWindowController *rwc;
    IBOutlet NSArrayController *outArrayController;
}

@implementation AppDelegate
....
- (IBAction)pushOk:(NSButton *)sender
{
    self->vi = [[ValueItem alloc]init];
    [vi setValueArray:[outArrayController arrangedObjects]];
    NSLog(@"vi.valueArray is:%@", vi.valueArray);

    if (rwc)
    {
        [rwc close];
    }
    rwc = [[ResultWindowController alloc] init];
    [rwc setShouldCascadeWindows:NO];
    [rwc showWindow:self];

}

呼び出しNSLog(@"vi.valueArray is:%@", vi.valueArray);は、配列の内容を問題なく返します。しかし、私が他の人でそれを使おうとすると、それはNSWindowController常に戻りますNULL

@interface ResultWindowController : NSWindowController
{
    ValueItem *vi;
    NSNumber *resultAverage;
}

@implementation ResultWindowController
@synthesize resultAverage;
...

- (IBAction)pushChange:(NSButton *)sender
{
    [self calculateAverage];
    [_outputLabel setDoubleValue:[resultAverage doubleValue]];
    NSLog(@"resultAverage is:%@", resultAverage);
    NSLog(@"vi.valueArray is:%@", vi.valueArray);
}

-(void)calculateAverage
{
    resultAverage = [vi.valueArray valueForKeyPath:@"@avg.nomValue"];
}

見つからないリンクが見つかりませんか?ここで何が恋しいですか?ありがとう!

4

1 に答える 1

1

ValueItem *vi2つのクラスに2つの別個の無関係なインスタンスがあります。これが、最初のクラスで設定した理由を説明していますが、2番目のクラスでviはまだnilです。

これを行うことで修正できるはずです:

rwc = [[ResultWindowController alloc] init];
[rwc setVi:self->vi];                // <--- this
[rwc setShouldCascadeWindows:NO];
[rwc showWindow:self];

これを行うには、で適切なセッターメソッドを定義する必要がありますRootWindowController

または、AppDelegateをモデルとして機能させる場合は、次のようにします。

ValueItem *vi = [(AppDelegate*)[UIApplication sharedApplication].delegate vi];

アクセスする必要があるときvivi次に、で宣言されたivarを削除できRootWindowControllerます(アプリデリゲート内のivarに直接アクセスするため)。

実際には、モデルとして機能する別のクラスを作成する方がよいでしょう。シングルトンである可能性があり、次のようにアクセスできます。

ValueItem *vi = [MyModel sharedModel].vi;

はるかに読みやすく、簡潔です。

于 2013-02-04T22:13:36.950 に答える