为什么我在NSInteger对象中得到奇怪的值?

时间:2011-06-16 04:08:25

标签: iphone ios nsinteger

我正在解析从Web服务返回的XML。如果它是一个有效的用户,那么我应该得到一个长整数。 (例如:2110504192344912815或2061128143657912001)。如果它无效,那么我得到0.然而,如果你看到我的代码,我有时会得到负值而不是userID,这就是我的验证码干草线。有什么提示吗?

NSMutableString *loginString;
    NSInteger userID;

-(void)parser:(NSXMLParser *)parser
didEndElement:(NSString *) elementName
 namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName{

    if ([elementName isEqual:@"GetUIDResult"]) {        
        userID = [loginString longLongValue]; / 0 if invalid password or LONG 
        [loginString release];
        loginString = nil;
    }   

}


//MY VALIDATION CODE..

    NSLog(@"The value of userID is: %ld",userID);

    if (userID > 0) {

    NSLog(@"YOU ARE NOW LOGGED IN");

    }else {

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login Validation Error" message:@"Unable to validate Login/Password combination" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
        [alert show];
        [alert release];

    }

1 个答案:

答案 0 :(得分:4)

检查loginString是否不等于@"0"

if (![loginString isEqualToString:@"0"]) {
       NSLog(@"YOU ARE NOW LOGGED IN");
}

编辑:我突然意识到你实际上在问why。好吧,NSString longLongValue方法的文档说

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/doc/uid/20000154-intValue

  

返回值长期值   接收者的文本,假设一个   十进制表示和跳过   开头的空白   串。返回LLONG_MAX或LLONG_MIN   在溢出。如果接收者返回0   不以有效小数开头   文本表示的数字。

所以,正在发生的事情是loginString的值是一个溢出,因为你是这样接收它,或者是错误地解析它。

编辑2:

我看到你编辑了你的代码。现在,您尝试将长long值存储到NSInteger类型的variabel:userID中。这肯定会导致溢出。