绝对令人困惑的问题,如果我尝试将可变数组中的字符串从外部plist与字符串进行比较,相同的字符串拒绝承认它们是相同的。但是,如果我直接使用其中的字符串创建可变数组,然后尝试进行比较,则说它们是相同的。
一个例子可能更容易:
NSString *dragDocPath = [documentsDirectory stringByAppendingPathComponent:@"draggable.plist"];
NSMutableArray *dragArray1 = [[NSMutableArray alloc] initWithContentsOfFile:dragDocPath];
NSString *s1 = [dragArray1 objectAtIndex:0]; //This is <string>skip</string> and checked with logging
NSString *s2 = @"skip";
if (s1==s2) { //do this
}
else { //do the other important thing
}
没有失败,它会做后者而拒绝看到s1 == s2
然而,我接着做了
NSMutableArray *dragArray1 = [[NSMutableArray alloc] init];
[dragArray1 addObject:@"skip"];
NSString *s1 = [dragArray1 objectAtIndex:0];
NSString *s2 = @"skip";
结果证明没问题。我在之前的测试项目中已经注意到了这一点,但我认为我做了一些明显错误的事情,所以离开了它。
我很困惑
我的plist文件是(并且它们适用于我可以在其中找到的数组的所有其他用途)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<string>skip</string>
</array>
</plist>
任何帮助,指出明显的缺陷等......将非常感激
我应该补充一点,我已经将它全部记录到每一步的第n度,并说“第一个跳过”,“第二个跳过”和“跳过不等于跳过”......
编辑:由于以下答案,问题解决了。始终使用isEqualToString例如: if([s1 isEqualToString:s2]){....
答案 0 :(得分:4)
这不是你比较字符串的方式,你实际上是在比较指针(它们是不同的)。你应该使用isEqualToString: