无法使用for循环创建NSMutableArray

Evg*_*ban -5 iphone objective-c nsmutablearray ios

我希望有一个数值为"25公斤","26公斤"......"149公斤","150公斤"的阵列.为了简化任务我写了这个:

-(NSMutableArray*)weightArray{

    NSMutableArray *myArray;
    for (int i=25; i++; i<150){
        NSString *weightString;
        weightString = [NSString stringWithFormat:@"%d kg", i];
        [myArray addObject:weightString];
    }
    return myArray;
}
Run Code Online (Sandbox Code Playgroud)

然后在我的视图中的viewDidload中我写道:NSLog (@"%@", [self weightArray]); 但看起来它不起作用.我可能会遗漏像语法这样明显的东西.为什么不起作用?

更新:最后我找到了一个解决方案 - 首先,我在@implementation部分声明了weightArray,然后我写道:

-(void)fillingArray{

    if (!weightArray){
        for (int i=25; i<150 ;i++){
            NSString *weightString = [[NSMutableArray alloc] init];
            weightString = [NSString stringWithFormat:@"%d kg", i];
            [weightArray addObject:weightString];
            NSLog(@"%@", weightString);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

在viewDidLoad我写道:

[self fillingArray];  
 NSLog(@"%@", weightArray);
Run Code Online (Sandbox Code Playgroud)

我想,我的问题出在那个字符串NSLog(@"%@",[self weightArray]); 在方括号中,它假设是方法名称,但我试图指向数组,没有任何事情发生.

Jef*_*ski 7

你正在做的事情有3个问题.

  1. 您需要像这样创建数组:NSMutableArray *myArray = [[NSMutableArray alloc] init];以便它实际存在.
  2. NSLog需要做的就是NSLog (@"%@", [self weightArray]);因为你是一个数组而不是一个数字.
  3. (感谢rmaddy指出这一点)你的for陈述的第二和第三部分是相反的.那么,i++你的状况是否总是非零.这种无限循环是导致机器锁定的原因.

编辑:这是一种只创建一次数组的更好方法.

-(NSMutableArray*)weightArray{

    static NSMutableArray *myArray;
    if (!myArray){
        myArray = [[NSMutableArray alloc] init];
        for (int i=25; i<150 ;i++){
            NSString *weightString;
            weightString = [NSString stringWithFormat:@"%d kg", i];
            [myArray addObject:weightString];
        }
    }
    return myArray;
}
Run Code Online (Sandbox Code Playgroud)

  • 我还看到了这种方法的另一个问题:3.每次调用此方法时都会创建此数组...可能是处理器昂贵的.为什么不在`init`中创建这个数组并分配给ivar或属性? (2认同)