2011-09-14 25 views
0

我想將數組複製到另一個但它不工作。我想要複製的原始數組包含五個對象;結果數組是空的。Objective-c複製對象錯誤

陣列被設置爲這樣的特性:

@property (nonatomic, retain) NSMutableArray *drinks; 

viewDidLoad方法是這樣的:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    checkCounter = 0; 
    Drink *drink1 = [[[Drink alloc] initWithImage:nil name:@"Test1" caffeine:11] autorelease]; 
    Drink *drink2 = [[[Drink alloc] initWithImage:nil name:@"Test2" caffeine:22] autorelease]; 
    Drink *drink3 = [[[Drink alloc] initWithImage:nil name:@"Test3" caffeine:33] autorelease]; 
    Drink *drink4 = [[[Drink alloc] initWithImage:nil name:@"Test4" caffeine:44] autorelease]; 
    Drink *drink5 = [[[Drink alloc] initWithImage:nil name:@"Test5" caffeine:55] autorelease]; 
    NSMutableArray *array = [[NSMutableArray alloc] initWithObjects: drink1, drink2, drink3, drink4, drink5, nil]; 
    drinks = [array mutableCopy]; 
} 

The first array fills up fine The second array is empty

沒有人有任何想法,爲什麼它不起作用?我試過使用常規的copy方法,只是簡單地分配它,但它不起作用。

編輯1:「數組」變量實際上被正確初始化,但它不會被複制。我試圖直接初始化「飲料」數組,但不管我嘗試「飲料」數組是否爲空。

編輯2:我添加了屏幕截圖,希望能夠澄清一些事情。

+1

一定出事了與飲料對象和陣列可能沒有正確設置。試着將NSMutableArray *數組設置爲幾個字符串,並將可變副本做到另一個NSMutableArray。一切正常。或者你是否忘記在NSLog中打印數組,如果這是你正在檢查的地方?你只需在那裏打印測試。 – Bourne

+1

你保留'array'兩次;一次用init,一次用retain。您可能需要將保留更改爲autorelease,以免泄漏。 –

+0

你的Drink對象是否符合NSCopying協議?也就是說,你的Drink對象是否實現了這個方法 - (id)copyWithZone:(NSZone *)zone? – trudyscousin

回答

3

首先,你幾乎漏所有東西,但drinks陣列;所有單獨的飲料物品和array在該代碼中被過度保留一次或兩次。

其次,drinks只能是空的,如果drink1drink5是零。也許initWithImage:name:caffeine:正在返回nil當圖像是nil

+0

「數組」實際上包含了所有內容,但是當將數組複製到新數組時,它不會複製它們。我嘗試直接初始化飲料數組,但沒有填充它。 – JheeBz

+0

這沒有任何意義。你將不得不顯示更多的代碼和/或調試日誌和/或日誌輸出。 – bbum

+0

我添加了一些圖片,希望他們澄清一些事情。 – JheeBz

0

飲料對象不符合NSMutableCopying協議? 你應該使用這個簡單:

drinks = [NSMutableArray arrayWithArray:array]; 

需要聲明數組作爲NSArray的,或者更簡單的:

drinks = [array copy]; 

,如果是我,你的代碼是:

- (void)viewDidLoad 
{ 
     [super viewDidLoad]; 
     checkCounter = 0; 
     Drink *drink1 = [[[Drink alloc] initWithImage:nil name:@"Test1" caffeine:11] autorelease]; 
     Drink *drink2 = [[[Drink alloc] initWithImage:nil name:@"Test2" caffeine:22] autorelease]; 
     Drink *drink3 = [[[Drink alloc] initWithImage:nil name:@"Test3" caffeine:33] autorelease]; 
     Drink *drink4 = [[[Drink alloc] initWithImage:nil name:@"Test4" caffeine:44] autorelease]; 
     Drink *drink5 = [[[Drink alloc] initWithImage:nil name:@"Test5" caffeine:55] autorelease]; 
     drinks = [[NSMutableArray alloc] initWithObjects: drink1, drink2, drink3, drink4, drink5, nil]; 
} 
+0

我需要它是一個NSMutableArray。此外,該代碼也沒有幫助。 – JheeBz