2

我在实现方法 isUser:receivingUpdatesFor: 来自 MGTwitterEngine 以检查用户是否在 Twitter 上关注另一个用户时遇到了一些问题。这是我的代码:

//Here is how I call the method (isRequestIdentifier is an NSString declare in the .h)
isRequestIdentifier = [[twitterEngine isUser:user1 receivingUpdatesFor:user2] retain];
NSLog(@"user1 : %@ - user2 : %@", user1, user2);
NSLog(@"isRequestIdentifier : %@",isRequestIdentifier);

#pragma mark TwitterEngineDelegate

- (void) requestSucceeded: (NSString *) requestIdentifier {
    if ([requestIdentifier isEqualToString:isRequestIdentifier]) {
        NSLog(@"Request isRequestIdentifier %@ succeeded", requestIdentifier);
    }
}

- (void) requestFailed: (NSString *) requestIdentifier withError: (NSError *) error {
    if ([requestIdentifier isEqualToString:isRequestIdentifier]) {
        NSLog(@"Request isRequestIdentifier : %@ failed with error: %@", requestIdentifier, error);
    }
}

它似乎有效,但即使我确定 user1 正在关注 user2,我的请求也总是失败,这是日志消息:

请求 isRequestIdentifier:E8284E63-A5B0-4C18-A3DB-B4F0A5E6048E 失败并出现错误:错误域 = HTTP 代码 = 400“操作无法完成。(HTTP 错误 400。)”

知道我做错了什么吗?

谢谢你的帮助。

4

1 回答 1

2

我想到了 :)!

转到 MGTwitterEngine.m 并查找以下声明:

  • (NSString *)isUser:(NSString *)username1 接收UpdatesFor:(NSString *)username2

你会发现这段代码:

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:0];
[params setObject:username1 forKey:@"user_a"];
[params setObject:username2 forKey:@"user_b"];

NSString *path = [NSString stringWithFormat:@"friendships/exists.%@", API_FORMAT];

这会导致问题,因为采用路径的“下一个”函数不会将参数写入 url,这就是我们收到 400 Bad Request 错误的原因。

我所做的“快速而肮脏”的修复是评论所有这些行并添加:

NSString *path = [NSString stringWithFormat:@"friendships/exists.%@?user_a=%@&user_b=%@", API_FORMAT, username1, username2];

完美无瑕!

于 2010-09-19T22:26:44.030 回答