簡體   English   中英

如何復制NSMutableArray

[英]How to copy NSMutableArray

我在main.m中創建一個可變數組,並在其中放置3個對象。 我知道它們在那里,因為我可以在main.m中對其進行操作。 我希望能夠在我創建的類中使用此數組。 這是我完成的代碼的一部分。 //main.m

#import "Portfolio.h"

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

//Portfolio.h #import

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

@end

//Portfolio.m #import“ Portfolio.h”

@implementation Portfolio

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

@end

totalValue中的NSLog命令不打印任何內容,僅顯示兩個括號。 這不可能嗎?

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

謝謝! 基思

從外觀上看,您無需初始化新的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

第一個問題:你有兩個變量具有相同的名稱holdings :一個在main.m文件,並在另外一個Portfolio 你打電話時

NSArray *copyHoldings = [NSMutableArray arrayWithArray: holdings];

您實際上是在指未初始化的holdings Portfolio實例變量,這就是為什么它不顯示任何內容的原因。

第二個問題:解決了上述名稱沖突問題后,您需要從main.m中公開全局變量:

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

雖然以上內容可以解決您的問題,但我強烈建議您不要使用全局變量...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM