从对象数组中检索元素时的问题 - 目标C.

时间:2013-02-25 06:44:39

标签: ios nsmutablearray nsarray

我有一个具有变量名称,年龄,本地和约的类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 个答案:

答案 0 :(得分: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,则

释放,否则无需释放

答案 1 :(得分:2)

您似乎正在重复使用myPerson。将对象添加到数组时,它不会创建它的副本。相反,它只存储对象的引用,因此当您稍后更改它时,它会更改指向它的所有引用。

更改此行:

[personArray addObject:myPerson];

到这一行:

[[personArray addObject:myPerson] copy];

为了将您的人员的副本添加到数组中。

答案 2 :(得分:2)

Person *myPerson=[[Person alloc]init];这一行,似乎你已经在for循环之外写了这一行,你要添加对象。因此,只有一个person class实例存在于数组的所有对象中。将该行放在for循环中,以便在每次迭代时将新的person对象添加到数组中。

答案 3 :(得分: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);
}

试试这个......