tags:

views:

192

answers:

2

I have code running good in 3.0 and 3.1 but when I use the SDK 3.1.2 is crash at the didReceiveAuthenticationChallenge method says a log "obj_msgSend" . It happens always when using didReceiveAuthenticationChallenge .

Also I have all the other methods in that class

didreceive response

connectionfinishloading

didfailwitherror etc

Please help me out

A: 

I am posting the twitter request class method , which is calling the twitter XML API URL for sending messages . Which require authentication .

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

}

crystal
A: 

I got the answer do not release the [newCredential release]; in didreceiveauthentiationchallenge

crystal