我正在解析从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];
}
答案 0 :(得分:4)
检查loginString是否不等于@"0"
if (![loginString isEqualToString:@"0"]) {
NSLog(@"YOU ARE NOW LOGGED IN");
}
编辑:我突然意识到你实际上在问why
。好吧,NSString
longLongValue
方法的文档说
返回值长期值 接收者的文本,假设一个 十进制表示和跳过 开头的空白 串。返回LLONG_MAX或LLONG_MIN 在溢出。如果接收者返回0 不以有效小数开头 文本表示的数字。
所以,正在发生的事情是loginString的值是一个溢出,因为你是这样接收它,或者是错误地解析它。
编辑2:
我看到你编辑了你的代码。现在,您尝试将长long值存储到NSInteger类型的variabel:userID中。这肯定会导致溢出。