我正在使用来自 facebook sdk 的 SBJSON。我刚刚从 GTMOAuth2 库中删除了 SBJSON 以避免重复符号,如Ishu
. 下一个问题是 GTMOAuth2 尝试首先使用 SBJSONParser 并且该类没有 objectWithString:error: 方法,只有 SBJSON 有该方法。我修改了代码以使用 SBJSON 类,甚至不尝试使用 SBJSONParser,因为它不起作用。在原始版本SBJsonParser
中先检查,然后再检查 SBJSON。
- (NSDictionary *)dictionaryWithJSONData:(NSData *)data {
...
// try SBJsonParser or SBJSON
Class jsonParseClass = NSClassFromString(@"SBJSON");
/*
if (!jsonParseClass) {
jsonParseClass = NSClassFromString(@"SBJsonParser");
}
*/
if (jsonParseClass) {
GTMOAuth2ParserClass *parser = [[[jsonParseClass alloc] init] autorelease];
NSString *jsonStr = [[[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding] autorelease];
if (jsonStr) {
obj = [parser objectWithString:jsonStr error:&error];
#if DEBUG
if (error) {
NSLog(@"%@ error %@ parsing %@", NSStringFromClass(jsonParseClass),
error, jsonStr);
}
#endif
return obj;
}
}
...
}
更新
在这里,我在 GTM-OAuth2 讨论组中提出了同样的问题。这发生在我回答问题之后,但我忘了在这里更新我的答案。总之,这就是我所做的:
- 使用 Facebook SDK 和 GTMOAuth2 作为静态库(可能这不是必需的)
- 从这里获取最新版本的 SBJSON
- 用这个替换 Facebook SDK 中的 SBJSON
- 从 GTM-OAuth2 中删除 SBJSON 源(或从构建阶段删除它们)
这为您提供了 Facebook SDK 中包含的最新 SBJSON 库。Facebook SDK 和 GTM-OAuth2 都将使用那个。它应该工作。