0

我正在解析从 Web 服务返回的 XML。如果它是一个有效用户,那么我应该得到一个长整数。(例如:2110504192344912815 或 2061128143657912001)。如果它无效,那么我得到一个 0。但是,如果你看到我的代码,我有时会得到用户 ID 的负值,这会使我的验证代码乱七八糟。有小费吗?

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

    }
4

1 回答 1

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

返回值 接收方文本的 long long 值,采用十进制表示并在字符串开头跳过空格。溢出时返回 LLONG_MAX 或 LLONG_MIN。如果接收方不是以数字的有效十进制文本表示形式开始,则返回 0。

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

编辑2:

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

于 2011-06-16T04:13:41.893 回答