【问题标题】:Comparing string from plist mutablearray with identical string. saying not equal将 plist mutablearray 中的字符串与相同的字符串进行比较。说不相等
【发布时间】:2012-05-05 02:19:23
【问题描述】:

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

【问题讨论】:

    标签: iphone objective-c xcode nsmutablearray plist


    【解决方案1】:

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

    【讨论】:

    • 完美,谢谢 - 这让我难过了一个小时。我想我没有注意到在某些情况下工作的指针和在其他情况下不工作的指针之间的区别,所以这是一个很好的教训!
    • 我认为 rdelmar 值得检查
    猜你喜欢
    • 1970-01-01
    • 2014-11-09
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    相关资源
    最近更新 更多