外部 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次までログに記録したことを追加する必要があります。「1番目はスキップ」、「2番目はスキップ」、「スキップはスキップと等しくありません」...
編集:以下の回答のおかげで問題は解決しました。常に常に isEqualToString を使用する
例: if([s1 isEqualToString:s2]){....