无法使用for循环创建NSMutableArray

时间:2013-03-30 21:58:46

标签: iphone ios objective-c nsmutablearray

我希望有一个数值为“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;
}

然后在我的视图中的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);
        }
    }

}

在viewDidLoad中我写道:

[self fillingArray];  
 NSLog(@"%@", weightArray);

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

2 个答案:

答案 0 :(得分:7)

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

  1. 您需要像这样创建数组:NSMutableArray *myArray = [[NSMutableArray alloc] init];以便它实际存在。
  2. 您的NSLog需要NSLog (@"%@", [self weightArray]);,因为您正在使用数组而不是数字。
  3. (感谢rmaddy指出这一点)你的for陈述的第2和第3部分是相反的。所以,i++是你的条件,并且总是非零。这种无限循环是导致机器锁定的原因。
  4. 编辑:这是一种只创建一次数组的更好方法。

    -(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;
    }
    

答案 1 :(得分:2)

您不分配和初始化数组。所以它有一个不确定的值,你的程序调用undefined beahvior。实际创建它:

NSMutableArray *myArray = [NSMutableArray new];