Grand Central Dispatch (GCD) und asynchrone APIs
Frage
Ich benutze Twitter API Tweets zu veröffentlichen. Manchmal kann dies einige Zeit in Anspruch nehmen, so dass ich die „Tweet Posting“ Operation im Hintergrund ausgeführt werden soll. Dafür ich verwende GCD, wie folgt aus:
- (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 immer die Delegaten Rückruf! Was bin ich?
Lösung
Haben Sie versucht, die Twitter-Verbindung auf dem Haupt-Thread ausgeführt wird? Wenn es auf dem Hauptthread arbeitet und nicht auf einige Hintergrund Warteschlange, könnten Sie in run Schleife Probleme mit NSURLConnection
laufen. (Nur eine wilde Vermutung.)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow