我正在尝试修改 Apple 使用 Twitter API 的示例代码,以便我可以使用流 API 过滤推文。我正在尝试实施针对此问题建议的方法:
TWRequest 是否适用于 twitter 流 api?
我已经按照建议创建了签名的 NSURLRequest 和 NSURLConnection 对象,并为连接对象设置了委托。选择一个有效的 Twitter 帐户并用于对 url 进行签名。问题是代表 connection: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
如您所见,一切似乎都正常,唯一的问题是委托方法从未被调用,我目前不知道为什么。
任何帮助将非常感激...
麦克风