绝对令人困惑的问题,如果我尝试将可变数组中的字符串从外部 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]){....