Так что я очень новичок в этом материале разработки iphone .... и я застрял.iphone app: делегат не отвечает
Я создаю приложение, которое подключается к twitter api. Однако при вызове метода connectionDidFinishLoading он, похоже, не признает делегата.
Вот исходный код класса запроса:
#import "OnePageRequest.h"
@implementation OnePageRequest
@synthesize username;
@synthesize password;
@synthesize receivedData;
@synthesize delegate;
@synthesize callback;
@synthesize errorCallBack;
@synthesize contactsArray;
-(void)friends_timeline:(id)requestDelegate requestSelector:(SEL)requestSelector{
//set the delegate and selector
self.delegate = requestDelegate;
self.callback = requestSelector;
//Set up the URL of the request to send to twitter!!
NSURL *url = [NSURL URLWithString:@"http://twitter.com/statuses/friends_timeline.xml"];
[self request:url];
}
-(void)request:(NSURL *) url{
theRequest = [[NSMutableURLRequest alloc] initWithURL:url];
theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection){
//Create the MSMutableData that will hold the received data.
//receivedData is declared as a method instance elsewhere
receivedData=[[NSMutableData data] retain];
}else{
//errorMessage.text = @"Error connecting to twitter!!";
}
}
-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{
if ([challenge previousFailureCount] == 0){
NSLog(@"username: %@ ",[self username]);
NSLog(@"password: %@ ",[self password]);
NSURLCredential *newCredential = [NSURLCredential credentialWithUser:[self username]
password:[self password]
persistence:NSURLCredentialPersistenceNone];
[[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];
} else {
[[challenge sender] cancelAuthenticationChallenge:challenge];
NSLog(@"Invalid Username or password!");
}
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
[receivedData setLength:0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[receivedData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
[theConnection release];
[receivedData release];
[theRequest release];
NSLog(@"Connection failed. Error: %@ %@", [error localizedDescription], [[error userInfo] objectForKey:NSErrorFailingURLStringKey]);
if(errorCallBack){
[delegate performSelector:errorCallBack withObject:error];
}
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
if (delegate && callback){
if([delegate respondsToSelector:[self callback]]){
[delegate performSelector:[self callback] withObject:receivedData];
}else{
NSLog(@"No response from delegate!");
}
}
[theConnection release];
[theRequest release];
[receivedData release];
}
Вот .h:
@interface OnePageRequest : NSObject {
NSString *username;
NSString *password;
NSMutableData *receivedData;
NSURLRequest *theRequest;
NSURLConnection *theConnection;
id delegate;
SEL callback;
SEL errorCallBack;
NSMutableArray *contactsArray;
}
@property (nonatomic,retain) NSString *username;
@property (nonatomic,retain) NSString *password;
@property (nonatomic,retain) NSMutableData *receivedData;
@property (nonatomic,retain) id delegate;
@property (nonatomic) SEL callback;
@property (nonatomic) SEL errorCallBack;
@property (nonatomic,retain) NSMutableArray *contactsArray;
-(void)friends_timeline:(id)requestDelegate requestSelector:(SEL)requestSelector;
-(void)request:(NSURL *) url;
@end
В методе: connectionDidFinishLoading
, следующее никогда не будет выполнена:
[delegate performSelector:[self callback] withObject:receivedData];
Вместо этого я получаю сообщение: «Нет ответа от делегата»
Кто-нибудь видит, что я делаю неправильно ?! или что может быть причиной проблемы?
Привет, Фиона, пожалуйста, отредактируйте свой вопрос, чтобы правильно форматировать код. Просто выберите раздел кода и используйте кнопку «код», чтобы он автоматически отступал. – ohhorob