为什么我在我的NSInteger对象中获取奇怪的值?

我正在parsing从Web服务返回的XML。 如果它是一个有效的用户比我应该得到一个长整数回来。 (例如:2110504192344912815或2061128143657912001)。 如果它是无效的,那么我得到一个0.然而,如果你看到我的代码,我得到的负值,有时用户ID,这是抛出我的validation码干草线。 有小费吗?

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]; } 

检查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

返回值接收方文本的long long值,假设为十进制表示forms,并在string开始处跳过空格。 返回溢出时的LLONG_MAX或LLONG_MIN。 如果接收方没有以数字的有效小数文本表示开始,则返回0。

所以,发生的事情是,loginString的值是一个溢出,要么是因为你是这样接收,或者是错误的parsing。

编辑2:

我看到你编辑了你的代码。 现在,您正试图将一个long long值存储到NSIntegertypes的variables:userID中。 这肯定会造成溢出。