Grand Central Dispatch (GCD) и асинхронные API - PullRequest
1 голос
/ 25 ноября 2010

Я использую Twitter API для публикации твитов.Время от времени это может занять некоторое время, поэтому я хочу выполнить операцию «Tweet posting» в фоновом режиме.Для этого я использую GCD, вот так:

- (void)myClassMethodToPostTweet {
    dispatch_async(network_queue, ^{
        // … construct the tweet message
        NSString *tweet = @"…";

        // … check if network is available
        [self isConnectedToWeb];

        // … initialize twitter API
        TwitterAPIClass *twitterAPI = [[[TwitterAPIClass alloc] init…] autorelease];
        twitterAPI.delegate = self;
        twitterAPI.APIKey = ...;
        twitterAPI.APISecret = ...;

        // … use twitter API to post the tweet
        [twitterAPI postTweet:tweet];
    });
}

...
/* and when the API reports a successful operation, update the required variables and UI */
...

- (void)twitterAPIDelegateMethodReportingOperationSuccess {
    // … update any variables/records

    // … update UI
    dispatch_async(dispatch_get_main_queue(), ^{
        // … UI updation code
    });
}

Проблема в том, что я не получаю обратный вызов делегата!Чего мне не хватает?

1 Ответ

2 голосов
/ 25 ноября 2010

Вы пытались запустить соединение Twitter в главном потоке? Если он работает в главном потоке, а не в некоторой фоновой очереди, возможно, вы столкнулись с проблемами цикла выполнения с NSURLConnection. (Просто дикая догадка.)

...