1

Ich verwende Twitter API, um Tweets zu posten. Manchmal kann das etwas dauern, daher möchte ich den Vorgang "Tweet posting" im Hintergrund durchführen. Dafür ich verwende GCD, wie folgt aus:Grand Central Dispatch (GCD) und asynchrone APIs

- (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 
    }); 
} 

Das Problem ist, ich bin nicht der Delegat Rückruf bekommen! Was vermisse ich?

+0

Welche Twitter API verwenden Sie? –

+0

http://github.com/bengottlieb/Twitter-OAuth-iPhone – Mustafa

Antwort

2

Haben Sie versucht, die Twitter-Verbindung auf dem Hauptthread auszuführen? Wenn es für den Hauptthread und nicht für einige Hintergrundwarteschlangen funktioniert, haben Sie möglicherweise Probleme mit der Laufschleife mit NSURLConnection festgestellt. (Nur eine wilde Schätzung.)

+2

+1 es ist eine Run-Loop-Problem. MGTwitterEngine verwendet die asynchrone API von NSURLConnection für die Kommunikation, die einen Runloop erfordert. Ich bezweifle, dass Sie dies mit GCD ohne größere Änderungen am Code arbeiten lassen. GCD spielt nicht gut mit Run-Loop-basierten Kommunikation. –

+0

Also, welche anderen Optionen habe ich? Würde NSOperation den Job machen? (obwohl ich bezweifle es, weil es GCD unter der Haube verwendet) – Mustafa

+1

Die Twitter-Bibliothek bietet Ihnen keine asynchrone Schnittstelle an? Es scheint eine natürliche Wahl zu sein, da es anscheinend bereits asynchrone 'NSURLConnection' verwendet. Das Codebeispiel, das Sie uns in der Frage gaben, scheint asynchron genug zu sein. Blockiert es irgendwo? – zoul