2012-07-28 123 views
0

这可能是最简单的一个,但我无法找到确切的原因。相反,在下面的话来解释就是我的代码:NSInteger返回0如果NSString为NULL

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

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

如果NSString返回NULL然后NSInteger返回0,如果NSString有一定的价值,然后返回NSInteger相同的值。

但当NSStringNULL那么我想NSInteger应该返回NULL不为0,但我无法验证NSInteger作为NULL

如何获得NULLNSInteger如果NSString为NULL?

+0

'id number = str? [NSNumber numberWithInteger:[str integerValue]]:[NSNull null];' – Joe 2012-07-28 13:37:42

回答

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字符串将返回长度0。 (事实上​​,任何方法发送到nil将返回0nil0.0等,这取决于返回类型。)

+1

请注意,如果您的字符串不能转换为整数(例如@“hi”),则您的'NSInteger'也将为0。 – Alladinian 2012-07-28 13:30:04

1

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

0

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

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

if (str == nil) 
{ 
    //our string is invalid 
} 
else 
{ 
    tempInteger = [str integerValue]; 
} 
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"); 
}