我试图修改Apple使用Twitter API的示例代码,以便我可以使用流媒体API来过滤推文。我试图实现该方法提出在回答这个问题:Twitter iOS流媒体API:没有收到数据
Does TWRequest work for the twitter streaming api?
我已经创建的建议已签署的NSURLRequest和NSURLConnection的对象,并设置连接对象的委托。选择一个有效的Twitter帐户并用于签署该网址。问题是委托连接:didReceiveData:方法永远不会被调用。
这里是我的代码:
@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");
}
从程序的输出是:
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
正如你所看到的,一切似乎都工作正常,唯一的问题是,委托方法是永远叫,我目前不知道为什么。
任何帮助,将不胜感激......
迈克
自发布以来,我得到了这个工作**没有**使用TWRequest对象。相反,我使用NSURLRequest/Connection对象,从流API接收JSON,并解析出传入的推文文本。仍然很高兴知道是否有人已经获得流媒体API与TWRequest虽然... – Michael 2012-07-24 05:26:29
你可以发布一些代码呢?谢谢。 – EvilPenguin 2012-08-08 22:42:16
问题在于你的NSURLConnection是从主运行循环启动的,所以线程在你的任何代表被调用之前退出。我在下面发布了一些代码。 – wbarksdale 2012-09-18 21:33:16