addOBject返回NULL?

时间:2015-10-21 20:21:13

标签: objective-c

我是代码的新手,我不明白为什么当我在主文件上键入它并启动命令行项目时这种工作正常:

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        NSMutableArray *myArray= [[NSMutableArray alloc] init];

        for (int anID = 0; anID < (20); anID++)
        {
            [myArray addObject:[NSNumber numberWithInt:anID]];
        }
        NSLog(@"%@", myArray);     
        return 0;
    }
}

并按预期返回一个填充了数字的数组:

2015-10-21 21:10:01.783 quicktry[3268:727372] (
    0,
    1,
    2,
    3,
    4,
    5,
    6,
    7,
    8,
    9,
    10,
    11,
    12,
    13,
    14,
    15,
    16,
    17,
    18,
    19
)
Program ended with exit code: 0

但如果我作为一个班级做同样的事情就行不通了:

@interface ViewController ()

@property NSMutableArray *myArray;

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];


    for (int anID = 0; anID < (20); anID++)
    {
        [self.myArray addObject:[NSNumber numberWithInt:anID]];
    }
    NSLog(@"%@", self.myArray);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

返回NULL。据我所知,这是完全相同的代码。为什么这不起作用?

2 个答案:

答案 0 :(得分:0)

你忘记了你的财产。

-(void)viewDidLoad {

[super viewDidLoad];

// You forget this:
self.myArray = [[NSMutableArray alloc] init];

  for (int anID = 0; anID < (20); anID++) { [self.myArray addObject:[NSNumber numberWithInt:anID]];

} NSLog(@"%@", self.myArray);

}

答案 1 :(得分:0)

您似乎忘记了实际创建阵列。我看到属性声明,但在访问它之前,属性设置为空数组。

在Objective-C 中发送消息给nil返回nil ,这就是为什么你可以发送&#34; addObject:&#34;到零属性并记录结果。