我希望有一个数值为“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]);在方括号中,它假设是方法名称,但我试图指向数组,没有任何事情发生。
答案 0 :(得分:7)
你正在做的事情有3个问题。
NSMutableArray *myArray = [[NSMutableArray alloc] init];
以便它实际存在。NSLog
需要NSLog (@"%@", [self weightArray]);
,因为您正在使用数组而不是数字。for
陈述的第2和第3部分是相反的。所以,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;
}
答案 1 :(得分:2)
您不分配和初始化数组。所以它有一个不确定的值,你的程序调用undefined beahvior。实际创建它:
NSMutableArray *myArray = [NSMutableArray new];