0

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

4

1 回答 1

4

这不是您比较字符串的方式,您实际上是在比较指针(它们是不同的)。你应该使用 isEqualToString:

于 2012-05-05T02:23:15.173 回答