2013-02-04 92 views
1

如何從我的NSWindowController中的model-class中調用數組?該valueArray設置在AppDelegate中,以ValueItem模型類:model from model返回NULL

@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"]; 
} 

我無法找到缺少的環節?我在這裏錯過什麼? 謝謝!

回答

1

在兩個類中有兩個單獨且無關的ValueItem *vi實例。這就解釋了爲什麼你將它設置在頭等艙,但在第二個vi仍然是nil

你應該能夠這樣做是爲了解決它:

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

爲了做到這一點,你應該在RootWindowController定義一個適當的setter方法。

另外,如果你想使你的AppDelegate行爲作爲一種模式,你可以這樣做:

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

當你需要訪問vi。然後,您可以刪除RootWindowController中聲明的vi ivar(因爲您可以直接訪問您的應用程序代理)。

實際上,最好創建一個單獨的類作爲模型。它可能是一個單身人士,你可以這樣訪問它:

ValueItem *vi = [MyModel sharedModel].vi; 

更具可讀性和簡潔性。

+0

你好塞爾吉奧,對不起,我還是新來的東西。我只是想'ValueItem * vi'我只是讓模型可以訪問而不需要創建一個不同的模型。我怎樣才能實際訪問'ValueItem'的同一個實例,還是需要其他策略? – JFS

+1

請看我的編輯。 – sergio

+0

太棒了!非常感謝!它的工作原理,但你可以讓我知道爲什麼'[rwc setVi:self> vi];'阻止創建一個獨立於'ValueItem'的新? – JFS