I am trying to modify a sample Apple code to use the Twitter API so that I can use the streaming API to filter tweets. I am trying to implement the method proposed in response to this question:
Does TWRequest work for twitter streaming?
I created the signed objects NSURLRequest and NSURLConnection, as suggested, and assigned a delegate to the connection object. A valid twitter account is selected and used to sign the URL. The problem is that connecting delegates: the didReceiveData: method is never called.
Here is my code:
@implementation Twitter -(id)init{ if (self=[super init]) { NSLog(@"Twitter init"); // Tell the notification centre to inform the app if the twitter account changes [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(twitterAccountChanged) name:ACAccountStoreDidChangeNotification object:nil]; // Create an account store object. ACAccountStore *accountStore = [[ACAccountStore alloc] init]; // Create an account type that ensures Twitter accounts are retrieved. ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; // Request access from the user to use their Twitter accounts. [accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) { if(granted) { NSLog(@"Twitter: Access to twitter accounts granted"); // Get the list of Twitter accounts. NSArray *accountsArray = [accountStore accountsWithAccountType:accountType]; // Pick the twitter account to use if ([accountsArray count] > 0) { // Grab the initial Twitter account to tweet from. ACAccount *twitterAccount = [accountsArray objectAtIndex:0]; // This is for a status filter NSURL *url=[NSURL URLWithString:@"https://stream.twitter.com/1/statuses/filter.json"]; // Create the parameters dictionary NSDictionary *dictionary=[NSDictionary dictionaryWithObjectsAndKeys:@"twitter", @"track", nil]; // Create TWRequest object TWRequest *req=[[TWRequest alloc] initWithURL:url parameters:dictionary requestMethod:TWRequestMethodPOST]; // Set the account [req setAccount:twitterAccount]; // Get a signed URL request NSURLRequest *signedRequest=[req signedURLRequest]; // Initate the connection [NSURLConnection connectionWithRequest:signedRequest delegate:self]; } else { NSLog(@"Twitter: No twitter accounts to access"); } } else { NSLog(@"Twitter: Access to twitter accounts denied"); } }]; return self; } return nil; } -(void)twitterAccountChanged{ NSLog(@"Twitter twitterAccountChanged"); } -(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ NSLog(@"data received"); }
Exit the program:
2012-07-24 09:50:03.668 TwitterAPITest[36722:10403] Twitter init 2012-07-24 09:50:03.836 TwitterAPITest[36722:11d03] Twitter: Access to twitter accounts granted
As you can see, everything is working fine, the only problem is that the delegate method is never called, and currently I have no idea why.
Any help would be greatly appreciated ...
Mike
source share