0

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

    }
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

戻り値受信者のテキストのlonglong値。小数表現を想定し、文字列の先頭の空白をスキップします。オーバーフロー時にLLONG_MAXまたはLLONG_MINを返します。受信者が数値の有効な10進テキスト表現で始まらない場合は、0を返します。

したがって、何が起こっているのかというと、loginStringの値は、このように受け取っているか、誤って解析しているために、オーバーフローになっています。

編集2:

コードを編集したようです。ここで、long long値をNSInteger型variabel:userIDに格納しようとしています。これは間違いなくオーバーフローを引き起こします。

于 2011-06-16T04:13:41.893 に答える