我似乎無法讓代理回調工作,當我線程我的代碼。我正在嘗試使用NSURLConnection調用遠程服務器以獲取access_token。 access_token在連接中被接收:didReceiveResponse:delegate。這是不是一個問題,直到我線程。我認爲我正在爲我的代表傳遞正確的對象,但它沒有達到連接:didReceiveResponse:獲取NSURLConnection委託回調到正確的線程
任何人都可以看到爲什麼連接:didReceiveResponse:在LoginViewController不會調用時,我線程調用?謝謝。
LoginViewController.m
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSString *access_token = [self getTokenFromResponse: response];
[self.delegate didGetAccessToken:access_token];
}
- (void)fetchAccessTokenNoUI
{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString: @"www.mysite.com"]];
[NSURLConnection connectionWithRequest:request delegate:self];
}
AccessToken.h
@interface AccessToken : NSObject
@property (atomic, strong) LoginViewController *loginViewController; // doing this to try to keep it persistent
- (void) fetchAccessTokenWithDelegate: (id <LoginDelegate>)delegate;
@end
AccessToken.m
- (void) fetchAccessTokenWithDelegate: (id <LoginDelegate>)delegate
{
dispatch_queue_t downloadQueue = dispatch_queue_create("Fetch access_token queue", NULL);
dispatch_async(downloadQueue,^{
// this works fine if I don't do it in a queue
self.loginViewController = [[LoginViewController alloc] init];
self.loginViewController.delegate = delegate;
[self.loginViewController fetchAccessTokenNoUI];
});
dispatch_release(downloadQueue);
}
CallingClass.m
- (void)didGetAccessToken:(NSString *)access_token
{
if (!access_token)
{
LoginViewController *userProfileViewController = [[LoginViewController alloc] init];
userProfileViewController.delegate = self;
[self.navigationController pushViewController:userProfileViewController animated:YES];
}
}
- (IBAction)favourite:(id)sender
{
AccessToken *accessToken = [[AccessToken alloc] init];
[accessToken fetchAccessTokenWithDelegate:self];
}
看看http://stackoverflow.com/a/8919203/214350 –
可能重複的[GCD和異步NSURLConnection](http://stackoverflow.com/questions/8918501/gcd-and-async-nsurlconnection ) –