Метод didReceiveAuthenticationChallenge падает в SDK 3.1.2 - PullRequest
0 голосов
/ 23 октября 2009

У меня есть код, работающий хорошо в 3.0 и 3.1, но когда я использую SDK 3.1.2, происходит сбой в методе didReceiveAuthenticationChallenge, который сообщает «obj_msgSend». Это всегда происходит при использовании didReceiveAuthenticationChallenge.

Также у меня есть все другие методы в этом классе

получил ответ

connectionfinishloading

didfailwitherror и т. Д.

Пожалуйста, помогите мне

Ответы [ 2 ]

0 голосов
/ 02 ноября 2009

Я получил ответ не выпускать [newCredential release]; в ответе на запрос аутентификации

0 голосов
/ 24 октября 2009

Я публикую метод класса Twitter-запроса, который вызывает URL-адрес Twitter XML API для отправки сообщений. Которые требуют аутентификации.

-(void)statuses_update:(NSString *)status delegate:(id)requestDelegate requestSelector:(SEL)requestSelector; {
    isPost = YES;
    // Set the delegate and selector
    self.delegate = requestDelegate;
    self.callback = requestSelector;
    // The URL of the Twitter Request we intend to send
    NSURL *url = [NSURL URLWithString:@"http://twitter.com/statuses/update.xml"];
    requestBody = [NSString stringWithFormat:@"status=%@",status];
    [self request:url];
}

-(void)request:(NSURL *) url {
    theRequest   = [[NSMutableURLRequest alloc] initWithURL:url];

    if(isPost) {
        NSLog(@"ispost");
        [theRequest setHTTPMethod:@"POST"];
        [theRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
        [theRequest setHTTPBody:[requestBody dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]];
        [theRequest setValue:[NSString stringWithFormat:@"%d",[requestBody length] ] forHTTPHeaderField:@"Content-Length"];
    }

    theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

    if (theConnection) {
        // Create the NSMutableData that will hold
        // the received data
        // receivedData is declared as a method instance elsewhere
        receivedData=[[NSMutableData data] retain];
    } else {
        // inform the user that the download could not be made
    }
}

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge: (NSURLAuthenticationChallenge *)challenge {
    //NSLog(@"challenged %@",[challenge proposedCredential] );

    if ([challenge previousFailureCount] == 0) {
        NSURLCredential *newCredential;
        newCredential=[NSURLCredential credentialWithUser:[self username] password:[self password] persistence:NSURLCredentialPersistenceNone];
        [[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];

        [newCredential release];
    } else {
        [[challenge sender] cancelAuthenticationChallenge:challenge];

        // inform the user that the user name and password
        // in the preferences are incorrect
        NSLog(@"Invalid Username or Password");
        isFirstTime==NO;

        UIAlertView * userNameAlert = [[UIAlertView alloc]initWithTitle:@"Alert" message:@"Invalid credentials. Please check your login details  !" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",nil];
        [userNameAlert show];

        if(delegate && callback) {
            if([delegate respondsToSelector:self.callback]) {
                [delegate performSelector:self.callback withObject:nil];
            } else {
                NSLog(@"No response from delegate");
            }
        } 
    }
}


- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    // this method is called when the server has determined that it
    // has enough information to create the NSURLResponse

    // it can be called multiple times, for example in the case of a
    // redirect, so each time we reset the data.
    // receivedData is declared as a method instance elsewhere
    [receivedData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    //NSLog([[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
    // append the new data to the receivedData
    // receivedData is declared as a method instance elsewhere
    [receivedData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    // release the connection, and the data object
    [connection release];
    // receivedData is declared as a method instance elsewhere
    [receivedData release];

    [theRequest release];


    // inform the user
    NSLog(@"Connection failed! Error - %@ %@",

    [error localizedDescription],
    [[error userInfo] objectForKey:NSErrorFailingURLStringKey]);

    if(errorCallback) {
        [delegate performSelector:errorCallback withObject:error];
    }

}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    // do something with the data
    if(delegate && callback) {  
        UIAlertView * userNameAlert = [[UIAlertView alloc]initWithTitle:@"Congratulation" message:@"Your Message is successfully posted to twitter !" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",nil];
        [userNameAlert show];

        isLoginChanged =YES;
        isFirstTime==NO;

        if([delegate respondsToSelector:self.callback]) {
            [delegate performSelector:self.callback withObject:receivedData];
        } else {
            NSLog(@"No response from delegate");
        }
    } 

    // release the connection, and the data object
    [theConnection release];
    [receivedData release];
    [theRequest release];

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...