2

我一直在尝试这个 Twitter api 的东西,它真的很混乱......

我不断使用以下代码获得 EXC_BAD_ACCESS 错误访问...这里有什么问题?

NSURL *followingURL = [NSURL URLWithString:@"https://api.twitter.com/1/users/lookup.json"];
// Pass in the parameters (basically '.ids.json?screen_name=[screen_name]')
id fromIntToNum = [NSNumber numberWithInteger: friID];
NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:@"159462573", @"user_id", nil];
// Setup the request
twitterRequest = [[TWRequest alloc] initWithURL:followingURL
                                                parameters:parameters
                                             requestMethod:TWRequestMethodGET];
// This is important! Set the account for the request so we can do an authenticated request. Without this you cannot get the followers for private accounts and Twitter may also return an error if you're doing too many requests
[twitterRequest setAccount:theAccount];
// Perform the request for Twitter friends
[twitterRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
    if (error) {
        /*
        // deal with any errors - keep in mind, though you may receive a valid response that contains an error, so you may want to look at the response and ensure no 'error:' key is present in the dictionary
        NSLog(@"%@",error);*/
    } else {
        /*NSError *jsonError = nil;
        // Convert the response into a dictionary
        NSDictionary *twitterGrabbedUserInfo = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONWritingPrettyPrinted error:&jsonError];
        // Grab the Ids that Twitter returned and add them to the dictionary we created earlier
        NSLog(@"%@", [twitterGrabbedUserInfo objectForKey:@"screen_name"]);*/
    }

}];

我分隔了我的代码失败的行...

什么可能导致这个 Twitter API 问题?

以下行导致崩溃:::

[twitterRequest performRequestWithHandler:^(NSData *responseData,
                NSHTTPURLResponse *urlResponse, NSError *error) {

我有时也会收到此错误:

[__NSCFNumber credentialForAccount:]: unrecognized 

更新:我注释掉了处理程序,我做了 TwitterRequest 和 ivar,但它仍然崩溃......

4

2 回答 2

2

在您的块中,您会查找错误,但如果遇到错误,则将其记录并继续。您应该输入“else”语句,并且只有在没有错误的情况下才继续。

为什么不尝试注释掉处理程序中的所有代码 - 不要做任何事情 - 看看你是否遇到了崩溃。然后尝试仅使用错误代码。然后尝试使用 JSON 序列化,最后是最后一行。如果你能找到导致问题的部分,那将有所帮助。

另外,我怀疑 performRequestWithHandler: 不会阻塞,但希望您在请求已完成的块内通知您的班级。如果是这样,则意味着“TWRequest *twitterRequest”应该是一个 ivar 或属性,并且您需要允许在处理程序完成时调用某些方法。您的崩溃可能是由于 ARC 在对象运行时重新分配了您的对象。

编辑:请注意,TWRequest 类描述说:“使用 initWithURL:parameters:requestMethod: 方法初始化一个新创建的传递所需属性值的 TWRequest 对象。”它说 PLURAL 属性,意思不止 1。可能是它还需要“credentialForAccount”属性吗?您必须阅读 twitter 文档才能找到所有必需的属性。

EDIT2:好吧,我们甚至不知道你是否能达到你的处理程序。把一个 NSLog 放在那里,但我怀疑它永远不会走那么远。如果为真,则留下三种可能性:

a) 它不喜欢这个 URL(虽然这看起来不错)

b)您缺少一些它期望的参数

c) id 不喜欢“theAccount”对象——它是一个有效的 ACAccount 对象吗?尝试 NSLogging 它。

它必须是这三件事之一。

于 2012-07-24T14:50:18.693 回答
1

我在 iOS5 和 TWRequest 中遇到了类似的问题,问题原来是在调用请求处理程序块之前释放了 ACAccountStore。以下代码为我解决了这个问题:

__weak ACAccountStore *wAccountStore = accountStore;
[request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
    __strong ACAccountStore *sAccountStore = wAccountStore;

    // handle the finished request here

    // to silence Xcode warning 'unused variable'
    // not necessary for releasing sAccountStore, 
    // it will go out of scope anyway when the block ends
    sAccountStore = nil;
}];

这样,accountStore 将被保留,直到块完成。

于 2013-02-07T09:00:24.943 回答