2012-05-02 26 views
0

我有一個數組這個數組包含所以在這裏問的對象,我需要改變陣列重寫NSObject的數據

Question *que=[[Question alloc]init]; 

que=[myarray objectAtIndex:1]; 

Question *que1=[[Question alloc]init]; 
que1=[myarray objectAtIndex:2]; 

here i need to inter change objects each other some 

[que1 setValue: que.name forKey:@"Name"]; 

[myarray relplaceObjectAtIndex:2 withObject:que1]; 

的位置是它的設定值相同objectValues

請指引我鋤正道可以改變價值。

感謝提前

+0

這難道不是出於某種原因? – CodaFi

回答

1

沒有與您的代碼在這裏顯著的問題:

  1. 本聲明:

    Question *que = [[Question alloc] init]; 
    

    分配新Question實例,並將其賦值給變量que。當你這樣做:

    que = [myarray objectAtIndex:1]; 
    

    您將要覆蓋您剛剛分配的Question情況下,有效的內存泄漏(因爲你從來沒有公佈過它)。如果您使用的是ARC,這不會成爲問題,但它是需要注意的,因爲有或沒有ARC,這是毫無意義的。你做了兩次,一次爲que,一次爲que1。因爲你實際上並不需要分配和初始化一個新的Question例如,你可以做:

    Question *que = [myarray objectAtIndex:1]; 
    
  2. 您獲取到Question對象的引用,並把它分配給que1。然後你改變它,並想把它放回這個數組中。這是毫無意義的,因爲數組已經持有對objectAtIndex:獲得的同一個Question實例的引用。

  3. 你還沒有真正解釋你在做什麼。整個代碼基本上可以歸結爲:

    [[[myarray objectAtIndex:2] setValue:[[myarray objectAtIndex:1] name] forKey:@"Name"]; 
    
0

您的代碼應該工作,你如何與你有什麼表示打算。就在幾個點要注意的:

  1. 你需要myarray是一個NSMutableArray
  2. 您在這裏有一個錯字:relplaceObjectAtIndex:2應該replaceObjectAtIndex
  3. 在數組索引0開始,我敢肯定你知道的。
+0

感謝您的迴應myarray包含NSMutable數組,但我需要交換對象是否有可能? –

0

首先使用的NSMutableArray對象來保存它不是NSArray的

然後。

你需要理解一個主要的東西,你只持有一個指向對象的指針。數組正在管理它。在訪問數組中的對象之前,你已經創建了一個對象,不要這樣做會造成內存泄漏。您只能從數組訪問對象。

Question * que1=[myarray objectAtIndex:1]; 
[que1 retain]; 
[myarray removeObjectAtIndex:1]; 

Question * que2=[myarray objectAtIndex:2]; 
[que2 retain]; 
[myarray removeObjectAtIndex:2]; 

它可能你沒有使用ARC,你的數組是唯一的對象所有者。所以,如果你從數組中刪除對象可能釋放整個對象

[myarray insertObject:que2 atIndex:1]; 
[myarray insertObject:que1 atIndex:2]; 

這是把對象在任何位置的樣本。 閱讀類引用NSMutableArray