Objective-C:如何使用引用数组的构造函数创建对象实例

时间:2018-03-04 06:23:53

标签: objective-c

我试图创建一个对象数组,但它没有按预期工作。我有一个带有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

请帮忙!

1 个答案:

答案 0 :(得分:1)

-[Person initWithName:]中的这一行是你的问题:

      name = name;

您只是将参数变量赋给自己。您需要分配实例变量。您可能想要复制输入字符串,所以:

_name = [name copy];