2015-10-07 78 views
0

我在main.m中創建了一個可變數組,並在其中放置了3個對象。我知道他們在那裏,因爲我可以在main.m中操縱他們。我希望能夠在我創建的類中使用此數組。這是我所做的一部分代碼。 //main.m如何複製NSMutableArray

#import "Portfolio.h" 

NSMutableArray *holdings = [NSMutableArray array]; 
[holdings addObject:stock1]; 
[holdings addObject:stock2]; 
[holdings addObject:stock3]; 

//Portfolio.h #進口

@interface Portfolio : NSObject 
{ 
    NSMutableArray *holdings; 
} 
-(void) totalValue; 

@end 

//Portfolio.m #進口 「Portfolio.h」

@implementation Portfolio 

-(void) totalValue { 
    NSArray *copyHoldings = [NSMutableArray arrayWithArray: holdings]; 
    NSLog(@"%@", copyHoldings); 
} 

@end 

的的NSLog totalValue中的命令只打印兩個括號。這不可能嗎?

請注意,我知道我真的應該以某種方式使用我在main.m中創建的數組,但我無法弄清楚如何引用它然後使用它。

謝謝! Keith

回答

0

第一個問題:你有兩個變量具有相同名稱的holdings:一個在main.m文件,而另一個在Portfolio。當你調用

NSArray *copyHoldings = [NSMutableArray arrayWithArray: holdings]; 

你實際上指的是holdings組合實例變量,這是沒有初始化,這就是爲什麼它打印什麼。

問題二:您修復上面的名稱衝突問題後,你需要從main.m文件暴露你的全局變量:

// Put it at the top of Portfolio.m, outside of class implementation 
extern NSMutableArray* holdingsFromMain; 

雖然上面的應該解決您的問題,我會強烈主張反對使用全局變量...

+0

我用它的答案得到了它的工作 - 謝謝!奇怪的,但我沒有使用外部線。再次,謝謝 – Keith

1

從外觀上看,你並沒有初始化一個新的Portfolio對象並在其上設置數組。

的main.m:

// .. 

NSMutableArray *holdings = [NSMutableArray array]; 
[holdings addObject:stock1]; 
[holdings addObject:stock2]; 
[holdings addObject:stock3]; 

Portfolio *portfolio = [[Portfolio alloc] init]; 
porforlio.holdings = holdings; 

[portfolio totalValue]; // should print 
+0

Portfolio * total = [[Portfolio alloc] init]; [total totalValue]; 對不起,我應該在main.m中包含上面兩行。 – Keith

+0

那麼你是否正在設置'porforlio.holdings'?這回答了你的問題了嗎? – JAL

+0

對不起,但我仍然有同樣的問題,當我打電話給totalValue時,沒有打印,只是空的括號。 – Keith

相關問題