2011-07-14 1 views
0

Почему не вызывает мой обратный вызов делегата:не может получить ASIHTTPRequest обратного вызова делегата, чтобы вызвать

#import "dbConnector.h" 
#import "ASIFormDataRequest.h" 
#import "JSONKit.h"; 

@implementation dbConnector 

//method to 
+(void)getQuestions:(NSString*)sectionId{ 
    NSString* url = @"http://dev.speechlink.co.uk/David/tester.php"; 
    NSURL *link = [NSURL URLWithString:url]; 
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:link]; 
    [request setPostValue:sectionId forKey:@"section"]; 
    [request setDelegate:self]; 
    [request setDidFinishSelector:@selector(requestFinished:)]; 
    [request startAsynchronous];  
} 

- (void)requestFinished:(ASIHTTPRequest *)request 
{ 
    //NSString *response = [request responseString]; 
    NSLog(@"hello"); //never prints 
} 

@end 


#import "ASITesterViewController.h" 
#import "dbConnector.h"; 

@implementation ASITesterViewController 
@synthesize questions; 

-(void)viewDidLoad{ 
    //code to initialise view 
    [dbConnector getQuestions:@"2"]; 
    [super viewDidLoad]; 
} 

- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 


- (void)dealloc { 
    [super dealloc]; 
} 

@end 

Минус соответствующие файлы заголовков и соответствующие ASIHTTPRequest файлы, только эти два файла у меня есть .. Что я делаю неправильно?

ответ

3

Он не будет вызван b/c, вы создали метод класса, чтобы он не имел доступа к методу выбора.

+(void)getQuestions:(NSString*)sectionId

Используйте Синхронный вызов:

+(void)getQuestions:(NSString*)sectionId{ 
    NSString* url = @"http://dev.speechlink.co.uk/David/tester.php"; 
    NSURL *link = [NSURL URLWithString:url]; 
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:link]; 
    [request setPostValue:sectionId forKey:@"section"]; 

    [request startSynchronous]; 

    NSError *error = [request error]; 
    if (!error) { 
     //Do what you want with the response 
    }else{ 
     //Error 
    } 

} 

EDIT 2 Передайте параметр делегата функции.

+(void)getQuestions:(NSString*)sectionId respondToDelegate:(id)delegate{ 
    NSString* url = @"http://dev.speechlink.co.uk/David/tester.php"; 
    NSURL *link = [NSURL URLWithString:url]; 
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:link]; 
    [request setPostValue:sectionId forKey:@"section"]; 
    [request setDelegate:delegate]; 
    [request setDidFinishSelector:@selector(requestFinished:)]; 
    [request startAsynchronous];  
} 
+0

Извините, так как я могу это решить? Я хотел использовать метод класса, потому что класс dbConnector - это только класс библиотеки – David

+0

Использование синхронизирующего соединения – Cyprian

+0

Отредактирован ответ с кодом. – Cyprian

0

Часть о вашем коде. Я не уверен, что это положить триггер запроса в метод класса другого класса. Знаете ли вы, что [dbConnector getQuestions:@"2"]; действительно обстреливает предполагаемый метод?

 Смежные вопросы

  • Нет связанных вопросов^_^