0

私は変数 name、age、local などを持つクラス Person を持っています。次のように、可変配列に person オブジェクトの値を追加しました。

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開発の初心者なので、親切に対応してくれることを願っています。ありがとう。

4

4 に答える 4

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 が有効になっていない場合は解放します。それ以外の場合は解放する必要はありません

于 2013-02-25T06:52:19.933 に答える
2

再利用しているようですmyPerson。オブジェクトを配列に追加しても、そのコピーは作成されません。代わりに、オブジェクトへの参照を格納するだけなので、後で変更すると、オブジェクトを指すすべての参照が変更されます。

この行を変更します。

[personArray addObject:myPerson];

この行に:

[[personArray addObject:myPerson] copy];

あなたの人のコピーを配列に追加するために。

于 2013-02-25T06:49:20.013 に答える
2

Person *myPerson=[[Person alloc]init];forこの行は、オブジェクトを追加しているループの外側にこの行を書き込んだようです。person classそのため、配列のすべてのオブジェクトによって表されるインスタンスは1つだけです。その行をforループ内に配置して、反復ごとに新しいpersonオブジェクトが配列に追加されるようにします。

于 2013-02-25T06:52:04.967 に答える
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);
}

これを試して...

于 2013-02-25T06:59:27.807 に答える