-1

私はiTunesにiOS4.3と5で正常に動作するアプリを持っています。iOS6では、実際のデバイスとシミュレーターの両方で正しく動作しません。コードを確認しましたが、問題はありません。それにもかかわらず、iOS6のif/thenステートメントに問題があるようです。アプリの機能は、以下のようなif/thenステートメントに大きく依存しています...

if (pageTitle.text == @"Alpha")
{
    fieldName.text = @"A";  
    anotherFieldName.text = @"AlphaText";
}

else {}

上記は、pageTitle.textの値が「Alpha」であるかどうかに基づいてテキストを変更します。これはずっとうまくいきました。ただし、iOS6では、pageTitle.textが「Alpha」と等しい場合でも、trueと評価されることはありません。繰り返しますが、これはiOS6でのみ発生します。私はNSLogステートメントを挿入して、pageTitle.textが実際に「Alpha」と等しいことを確認しました。この事実にもかかわらず、上記が真であると評価されることはありません(つまり、NSLogはpageTitle.textが "Alpha"に等しいと言いますが、上記のコードはpageTitle.textを "Alpha"として評価しません)。これはiOS6でのみ発生します。

誰かアイデアはありますか?iOS6でこれほど基本的なことが変更されたとは思えませんが、何かを見逃したのではないでしょうか。それとも、これはiOS6のバグである可能性があると思いますか?どんな助けでも認められるでしょう。ありがとうございました。

4

2 に答える 2

3

コードの問題は、if-elseロジックではなく、if条件にあります。2つの文字列が等しいかどうかを比較する適切な方法は次のとおりです。

if ([pageTitle.text isEqualToString:@"Alpha"])
{
    fieldName.text = @"A";  
    anotherFieldName.text = @"AlphaText";
}
else 
{
...
}

平等とアイデンティティの詳細については、こちらをお読みください。

于 2012-09-25T01:01:38.193 に答える
2
if( pageTitle.text == @"Alpha" )

ここでは、オブジェクトへの2つのポインターを比較しています。それらの1NSStringつはごみです。
明らかに、メモリアドレスを比較しているので、比較は失敗します。

NSString2つのオブジェクトが等しいかどうかをテストする場合は、次を使用します。

if( [ pageTitle.text isEqualToString: @"Alpha" ] == YES )

次に、実際の文字列を比較します。

于 2012-09-25T00:51:56.953 に答える