[英]trouble adding multiple objects to an NSMutableArray
我有一个简单的 Person 类,它定义了一个人的年龄、体重和身高的 3 个整数。 我使用@synthesize 为这些变量创建了 setter/getter 函数,该类包含 1 个打印这些变量的函数 printInfo。
@import Foundation;
@interface Person : NSObject {
int age;
int weight;
int height;
}
@property int age, weight, height;
-(void) printInfo;
@end
@implementation Person
@synthesize age, weight, height;
-(void) printInfo {
NSLog(@"This person is %i years old, %i feet tall, and weighs %i pounds", age, height, weight);
}
@end
int main(int argc, char *argV[]){
@autoreleasepool {
Person *personBuffer = [[Person alloc] init];
personBuffer.age = 16;
personBuffer.weight = 135;
personBuffer.height = 5;
NSMutableArray *people = [NSMutableArray array];
[people addObject:personBuffer];
personBuffer.age = 20;
personBuffer.weight = 143;
personBuffer.height = 5;
[people addObject: personBuffer];
for(int i = 0; i < [people count]; ++i) {
[people[i] printInfo];
}
}
return 0;
}
在代码中,我试图创建一个 Person 类型的 NSMutableArray 并使用 Person 对象 personBuffer 向它添加对象,以便我可以在我的程序中动态创建人。 但是,当我运行代码时,它没有打印出两个对象的信息,而是打印出我添加两次的第二个对象的信息,但我不知道为什么。 我通过写作做了一些测试:
[people[0] printInfo]
[people[1] printInfo]
这将第二个对象打印两次,所以我知道这是数组本身的问题,而不是用于打印的 for 循环或打印语句。 我认为这可能是指针或内存分配的问题,因为这样的显式内存分配对来自 Python 和 C++ 的我来说仍然是一个非常陌生的概念。
帮助解决这个问题将不胜感激。 先感谢您。
编辑:这是我的新代码,但我遇到了更多问题:
@import Foundation;
@interface Person : NSObject {
int age;
int weight;
int height;
}
@property int age, weight, height;
-(void) printInfo;
@end
@implementation Person
@synthesize age, weight, height;
-(void) printInfo {
NSLog(@"This person is %i years old, %i feet tall, and weighs %i pounds", age, height, weight);
}
@end
int main(int argc, char *argV[]){
@autoreleasepool {
int inputAge, inputWeight, inputHeight;
NSMutableArray *people = [NSMutableArray array];
for(int i = 0; i < 2; ++i) {
Person *personBuffer = [[Person alloc] init];
scanf("%s", &inputAge);
personBuffer.age = inputAge;
scanf("%s", &inputWeight);
personBuffer.weight = inputWeight;
scanf("%s", &inputHeight);
personBuffer.height = inputHeight;
[people addObject:personBuffer];
}
for(int i = 0; i < [people count]; ++i) {
[people[i] printInfo];
}
}
return 0;
}
现在,当我输入年龄、身高等值时,程序打印的值与我输入的值不同。 例如,我输入 2 作为年龄的值,程序打印了值 50。
提前致谢。
它需要为 Person 的对象分配不同的内存,例如
Person *personBuffer1 = [[Person alloc] init];
personBuffer1.age = 16;
personBuffer1.weight = 135;
personBuffer1.height = 5;
NSMutableArray *people = [NSMutableArray array];
[people addObject:personBuffer1];
Person *personBuffer2 = [[Person alloc] init];
personBuffer2.age = 20;
personBuffer2.weight = 143;
personBuffer2.height = 5;
[people addObject: personBuffer2];
for(int i = 0; i < [people count]; ++i) {
[people[i] printInfo];
}
您需要添加不同的 Person 类对象。 例如。
NSMutableArray *people = [NSMutableArray array];
Person *personBufferOne = [[Person alloc] init];
personBufferOne.age = 16;
personBufferOne.weight = 135;
personBufferOne.height = 5;
[people addObject:personBufferOne];
Person *personBufferTwo = [[Person alloc] init];
personBufferTwo.age = 20;
personBufferTwo.weight = 143;
personBufferTwo.height = 5;
[people addObject: personBufferTwo];
for(int i = 0; i < [people count]; ++i) {
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.