0

我有一个 Person 类,其中包含变量 name、age、local 和 about,我将 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数组的所有对象只代表一个存在的实例。将该行放入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 回答