So I'm trying to build a layer on top of the Twitter API (among others) for a project and I need to find a way to return the result of the Twitter actions to the layer of abstraction.
Right now my setup is something like this, for example:
-(NSDictionary *)sendTweet:(Tweet *)tweet {
__block NSMutableDictionary *responseDictionary;
NSLog(@"Sending tweet");
NSMutableDictionary *twitterRequestDictionary = [[NSMutableDictionary alloc] init];
[twitterRequestDictionary setObject:tweet.tweetBody forKey:@"status"];
TWRequest *request = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"https://api.twitter.com/1/statuses/update.json"]
parameters:twitterRequestDictionary
requestMethod:TWRequestMethodPOST];
[request setAccount:self.userAccount];
[request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
responseDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:nil];
NSLog(@"Response dictionary: %@", responseDictionary);
return responseDictionary;
}];
}
But because the 'performRequestWithHandler:' method returns 'void' I the final line causes an error.
I've also tried placing the 'return' statement outside of the block and locking the execution of the block section of code after discovering this article: http://omegadelta.net/2011/05/10/how-to-wait-for-ios-methods-with-completion-blocks-to-finish
Still no luck.
I hope someone can shed some light on this way to do it (or perhaps suggest a better method to return the data).
Why don't you also use a block to return the response? Something like:
-(void)sendTweet:(Tweet *)tweet withResponseCallback:(void (^)(NSMutableDictionary *responseDictionary))callback {
NSLog(@"Sending tweet");
NSMutableDictionary *twitterRequestDictionary = [[NSMutableDictionary alloc] init];
[twitterRequestDictionary setObject:tweet.tweetBody forKey:@"status"];
TWRequest *request = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"https://api.twitter.com/1/statuses/update.json"]
parameters:twitterRequestDictionary
requestMethod:TWRequestMethodPOST];
[request setAccount:self.userAccount];
[request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSMutableDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:nil];
NSLog(@"Response dictionary: %@", responseDictionary);
callback(responseDictionary);
}];
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With