2009-10-23 206 views
0

我的代码在3.0和3.1版本中运行良好,但是当我使用SDK 3.1.2时在didReceiveAuthenticationChallenge方法崩溃时显示日志“obj_msgSend”。它总是在使用didReceiveAuthenticationChallenge时发生。didReceiveAuthenticationChallenge方法在SDK中崩溃3.1.2

我也有在该类

didreceive响应

connectionfinishloading的所有其他方法

didfailwitherror等

请帮我

+0

发布您的代码,以便我们可以看到发生了什么。 – Jasarien 2009-10-23 12:42:29

+0

张贴代码作为我的问题的答案请看看 – crystal 2009-10-24 10:19:44

回答

0

我张贴在Twitter的请求类方法,它正在调用Twitter XML API URL来发送消息。 这需要验证。

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

} 
0

我得到的答案不释放[newCredential发布]; in didreceiveauthentiationchallenge