当我使用xcode中的componentsSeparatedByString函数将字符串分离为数组时,我遇到了这个问题。
所以我从这个字符串创建一个数组:
theDataObject.stringstick = @"1 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0";
stickerarray = [[NSMutableArray alloc] initWithArray:[theDataObject.stringstick componentsSeparatedByString:@" "]];
所以在我看来,我希望:
stickerarray = {@"1",@"0",@"0",@"0",@"0",@"0",@"0",@"0",@"1",@"0",@"1",@"1",@"1",@"0",@"0",@"0"}
所以当我通过if语句查看索引是否为= 1
时for ( int n = 0; n <= 15; n++) {
if ([stickerarray objectAtIndex:n] == @"1") {
NSLog(@"this works %i", n);
} else {
NSLog(@"this did not work on %@", [stickerarray objectAtIndex:n]);
}
}
这就是我得到的:
this did not work on 1
this did not work on 0
this did not work on 0
this did not work on 0
this did not work on 0
this did not work on 0
this did not work on 0
this did not work on 0
this did not work on 1
this did not work on 0
this did not work on 1
this did not work on 1
this did not work on 1
this did not work on 0
this did not work on 0
this did not work on 0
当我发现这不起作用时我很惊讶所以我尝试了一些查询:
NSLog(@"ns array value of %@",[stickerarray objectAtIndex:2] );
ns array value of 0
NSLog(@"%@", stickerarray);
(
1,
0,
0,
0,
0,
0,
0,
0,
1,
0,
1,
1,
1,
0,
0,
0
)
NSLog(@"%@", theDataObject.stringstick);
1 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0
当我在if语句中进行比较时,我怀疑它是@“1”。如果你能为我解决这个问题,那将是一个很好的帮助。谢谢:)
答案 0 :(得分:3)
您对componentsSeparatedByString的使用可能有效,但您的测试存在缺陷。在objective-c中,您需要使用NSString的isEqualToString。 &#34; ==&#34;比较两个字符串的指针,只有当它们指向字符串的同一个实例时才相等。你应该使用更像的东西:
[item isEqualToString:@"1"]
答案 1 :(得分:1)
您没有正确比较字符串..
for ( int n = 0; n <= 15; n++) {
if ([[stickerarray objectAtIndex:n] isEqualToString:@"1"]) {
NSLog(@"this works %i", n);
} else {
NSLog(@"this did not work on %@", [stickerarray objectAtIndex:n]);
}
}
额外的建议..你也应该以不同的方式遍历你的数组。 (块会最快)
for (id obj in stickerarry){
//do stuff with obj
}
答案 2 :(得分:0)
运算符==
比较两个值 - 整数,浮点数,引用等。当你写:
[stickerarray objectAtIndex:n] == @"1"
您在询问objectAtIndex:
返回的引用是否等于文字表达式@"1"
返回的引用,这不太可能是真的或者您是什么愿望。
要比较对象实例是否表示相同的值,请使用方法isEqual:
:
[[stickerarray objectAtIndex:n] isEqual:@"1"]
这适用于任何类型的对象,对于字符串,通常使用isEqualToString:
更常见 - 它产生完全相同的答案,但速度要快一些。