1

これは最も単純なものかもしれませんが、正確な原因を見つけることができません。次の言葉で説明する代わりに、私のコードは次のとおりです。

NSString *str = @"";
NSInteger tempInteger = [str integerValue];

if (tempInteger == 0)
{
  NSLog (@"do something");
}

NSString返す場合は0を返しNULL、何らかの値がある場合は同じ値を返します。NSIntegerNSStringNSInteger

しかし、いつ0 ではなく返す必要がNSStringありNULLますが、として検証できません。NSIntegerNULLNSIntegerNULL

NULLの場合にNULL値を取得するにはどうすればよいですか?NSIntegerNSString

4

4 に答える 4

10

NULLポインターです。NSInteger は数値のみを保持できる C プリミティブです。NSInteger が になることはありませんNULL。(補足: Objective-C オブジェクト ポインターについて話すときは、nilではなくを使用しますNULL。)

代わりに、整数値が 0 で文字列が ではない NULL場合のみを処理したい場合は、次のように条件を変更する必要があります。

if (tempInteger == 0 && str != nil)

ただし、あなたの場合、文字列はそうではありませんnil。それは単に存在しますが、空の文字列です。それも確認したい場合は、次のような状態になる可能性があります。

if (tempInteger == 0 && [str length] > 0)

文字列は length を返すため、これは両方のケースをチェックします。(実際、 に送信されたメソッドは、戻り値の型に応じて 、 、 などを返します。)nil0nil0nil0.0

于 2012-07-28T13:29:01.433 に答える
2

実際には、次のようなロジックを実装できます。

  1. 文字列が実際に整数であるかどうかを確認してください
  2. それを変換してみてください
  3. 0に等しい場合は、何かを実行します

このような何かがトリックを行います:

NSString *str = @"";
NSInteger tempInteger = [str integerValue];
NSCharacterSet *cs = [NSCharacterSet decimalDigitCharacterSet];
BOOL safe = [cs isSupersetOfSet:[NSCharacterSet characterSetWithCharactersInString:str]] && str.length > 0;

if (safe && tempInteger == 0)
{
  NSLog (@"do something");
}
于 2012-07-28T13:40:06.280 に答える
1

整数は、数値とナットのヌル値のみを保持できます。この場合、最初に文字列の長さをチェックして、それがnullかどうかをチェックする必要があります

于 2012-07-28T13:22:34.417 に答える
0

NSIntegerスカラー変数型です。NSIntegerにキャストされたときのアドレスへのポインタを示す値NULL(実際にはObjectiveC)は。になります。nil00

タスクを実行するには、整数に変換する前に比較NSStringする必要があります。nil

if (str == nil)
{
   //our string is invalid
}
else
{
    tempInteger = [str integerValue];
}
于 2012-07-28T13:31:03.477 に答える