2013-02-25 67 views
0

的數組元素檢索時,我有一類人用變量的名字,年齡,地方和有關,如我添加人員對象的值,以一個可變數組:問題從對象 - 目標C

Person *myPerson=[[Person alloc]init]; 
NSMutableArray *personArray=[[NSMutableArray alloc]init]; 

myPerson.name=namefield; //'namefield' retrieved from db 
myPerson.age=agefield;  //'agefield' retrieved from db 
myPerson.local=locfield; //'locfield' retrieved from db 
myPerson.about=aboutfield; //'aboutfield' retrieved from db 

[personArray addObject:myPerson]; 

和我想打印出來使用下面的代碼的元素時問題;後者一再表示最後一個元素,

for (int i = 0; i < [personArray count]; i++){ 
    Person * p = [personArray objectAtIndex:i]; 
    NSLog(@"name %@",p.name); 
    NSLog(@"age %@",p.age);  
} 

希望你能善待我,因爲我是新來的傢伙iPhone開發。謝謝。

+0

什麼是錯誤或問題? – croyneaus4u 2013-02-25 06:45:47

+0

personArray的最後一個元素重複顯示! – 2013-02-25 06:47:41

+0

可能重複的[如何添加新的對象實例在一個可變數組中使用相同的對象引用作爲前一個](http://stackoverflow.com/questions/6359023/),[數組addobject正在改變所有數組值,而不是隻是追加](http://stackoverflow.com/q/8714385) – 2013-02-25 06:48:31

回答

2

Person *myPerson=[[Person alloc]init];這一行,看起來你已經在for循環的外面寫了這行代碼,你正在添加對象。因此,只有一個person class的實例在那裏由數組的所有對象表示。將該行放入for循環中,以便在每次迭代時將新的person對象添加到該數組中。

+0

你的右..工作! thanx ... – 2013-02-25 06:54:07

2

看起來您正在重新使用myPerson。將一個對象添加到數組時,它不會創建它的副本。相反,它只是存儲對象的引用,因此稍後更改它時,它會更改指向它的所有引用。

改變這一行:

[personArray addObject:myPerson]; 

這一行:

[[personArray addObject:myPerson] copy]; 

爲了增加複製你的人到陣列。

3

你可以寫這樣的代碼

NSMutableArray *personArray=[[NSMutableArray alloc]init]; 
for(int i=o;i<noOfRecords;i++) 
{ 
    Person *myPerson=[[Person alloc]init]; 
    myPerson.name=namefield; //'namefield' retrieved from db 
    myPerson.age=agefield;  //'agefield' retrieved from db 
    myPerson.local=locfield; //'locfield' retrieved from db 
    myPerson.about=aboutfield; //'aboutfield' retrieved from db 

    [personArray addObject:myPerson]; 
    [myPerson release]; 
} 

然後檢索數組,因爲你只讀取最後一行

釋放,如果ARC沒有啓用,否則沒有必要釋放

+0

正是我所說的。 – croyneaus4u 2013-02-25 06:53:14

+0

是的,這是我的觀點,但我後來知道,你也發佈相同的 – 2013-02-25 06:54:26

+0

是啊當然..沒問題,事情應該清楚,他是這一切都很重要:) :),你提供了一個很好的代碼顯示他歡呼聲 – croyneaus4u 2013-02-25 06:59:35

0
Person *myPerson=[[Person alloc]init]; 
NSMutableArray *personArray=[[NSMutableArray alloc]init]; 

myPerson.name=namefield; //'namefield' retrieved from db 
myPerson.age=agefield;  //'agefield' retrieved from db 
myPerson.local=locfield; //'locfield' retrieved from db 
myPerson.about=aboutfield; //'aboutfield' retrieved from db 

for (int i = 0; i < [personArray count]; i++) 
{ 
    [personArray addObject:myPerson]; 
    NSLog(@"name %@",p.name); 
} 
這可能是有益的

試試這個...