2

私は次のように NSString で NSMutabledictionary オブジェクトを取得しています:

NSString *state=[d valueForKey:@"State"];

現在、状態がnullである場合もあれば、テキストで満たされている場合もあります.だから私はそれを比較しています.状態を比較すると、NSStringになることもあれば、NSCFStringになることもあります..だから、望ましい結果を得ることができません..

if([state isEqualToString@""])
{
//do something 
}
else
{
//do something
}

そのため、比較中に nil が返されることがあります。そのため、すぐに else ブロックにジャンプします。

NSString であるか NSCFString であるかに関係なく、状態が空であるかどうかを比較する標準的な方法が必要です...

どうすればいいですか?

4

3 に答える 3

2

NSCFString必要な結果が得られない場合は、 の代わりにが得られたことが原因ではないことを保証できますNSString

Objective-C では、フレームワークはクラスター クラスで満たされています。つまり、ドキュメントにクラスが表示されますが、実際には単なるインターフェースです。フレームワークには、代わりにこれらのクラスの独自の実装があります。たとえば、お気づきのように、クラスは多くの場合、代わりNSStringにクラスで表されます。また、 や のように、実際には のサブクラスであり、期待どおりに動作するものNSCFStringもいくつかあります。NSConstantStringNSPathStore2NSString

あなたの問題、私が見たところ...

状態が null になることもあれば、テキストで埋められることもあります。

... Objective-C では、 でメソッドを呼び出すことは合法nilです。(は、 C# や Java などの他の言語におけるNilObjective-C の概念です。) ただし、そうすると、戻り値は常にゼロになります。nullしたがって、文字列がnilである場合、メソッドで行われた等価比較は、 と比較してNOもを返しますnil。それでも、空の文字列は と同じではないことに注意してください。何も存在しないと見なすことができるnilからです。nil空の文字列には文字がありませんが、少なくとも文字はあります。nil何もないことを意味します。

したがって、メソッドを使用して空の文字列と比較する代わりに、単純なポインターの等価性を使用して、そうでないstateことを確認する必要があるでしょう。statenil

if(state == nil)
{
    //do something 
}
else
{
    //do something
}
于 2012-12-05T06:12:12.827 に答える
1

あなたはこれを行うことができます

if([state isEqualToString:@""])
{
//do something 
}
else
{
//do something
}
于 2012-12-05T06:31:33.747 に答える
-1

正しい答えを得るには、型キャストする必要があります。

 NSString *state = (NSString *) [d valueForKey:@"State"];

  if(state != nil)
  {
      if(state.length > 0)
      {
           //string contains characters
      }
  }
于 2012-12-05T06:09:23.010 に答える