1

这可能是最简单的一个,但我无法找到确切的原因。下面是我的代码,而不是用文字来解释:

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

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

如果NSString返回NULLNSInteger返回 0,如果NSString有一些值则NSInteger返回相同的值。

但是我想要什么时候NSString不应该返回0 但我无法验证为.NULLNSIntegerNULLNSIntegerNULL

如果为 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)

这会检查这两种情况,因为nil字符串将返回 length 0。(实际上,发送到的任何方法nil都会根据返回类型返回0nil、等。)0.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

一个整数只能保存一个坚果空值的数字。在这种情况下,您应该首先检查字符串的长度以检查它是否为空

于 2012-07-28T13:22:34.417 回答
0

NSInteger是标量变量类型。值NULL(实际上nil在 ObjectiveC 中),表示指向地址的指针0,当转换为 NSInteger 时将是0.

为了完成您的任务,您必须在将其转换为整数之前进行NSString比较。nil

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