我试图创建一个对象数组,但它没有按预期工作。我有一个带有name属性的Person类,我试图用另一个数组中的名称实例化Person对象,如下面的代码所示。程序输出"(null)"而不是名称数组中的名称。这意味着它没有按预期工作。
ViewController.m
names = [NSArray arrayWithObjects:@"Mike", @"John", @"Jimmy", @"Tim", nil];
personsArray = [[NSMutableArray alloc] initWithCapacity:4];
for (int i = 0; i <= 4; i++) {
Person *person = [[Person alloc] initWithName:[names objectAtIndex:i]];
NSLog(@"%@", [person name]); // outputs "(null)"
[personsArray addObject:person];
}
Person.m
#import "Person.h"
@implementation Person
-(id)initWithName:(NSString *)name {
if (self = [super init]) {
name = name;
}
return self;
}
@end
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
-(id)initWithName:(NSString *)name;
@end
请帮忙!
答案 0 :(得分:1)
-[Person initWithName:]
中的这一行是你的问题:
name = name;
您只是将参数变量赋给自己。您需要分配实例变量。您可能想要复制输入字符串,所以:
_name = [name copy];