2011-07-08 35 views
0

我有一个应用程序,我已经实现了Facebook登录。我将Facebook的源代码直接复制到我的项目中。现在我需要添加谷歌登录。这次我将GTMOAuth2添加为静态库。 (我也有这方面的资料,但是我没有特别的理由就把它作为一个静态库加入)。问题是他们都使用SBJson,我得到重复的符号。看起来,Facebook的SDK中的SBJson比GTMOAuth2库中的SBJson更新。我是一个noob我从来没有重复的符号,我该怎么办?是否有解决这个特定问题或解决一般重复的符号?我只是删除出现两次的东西,直到它工作,有没有一些链接器设置?谢谢。重复的符号,GTMOAuth2和Facebook SDK的iOS都使用SBJSON

更新 - 我想什么:

新增两个项目作为静态库。

  • 我试图从GTMOAuth2,结果删除SBJSON.h /米文件:谷歌登录后JSON解析错误:

  • 我试图删除从Facebook的iOS的SDK的SBJSON.h /米文件;结果:Facebook登录后发生json解析错误。

我可以让这两个版本的SBJSON在我的应用程序中奇迹般地共存而没有重复的符号吗?我是否必须修改一个库才能使用我决定使用的ONE SBJSON?

回答

3

我使用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; 
     } 
    } 
    ... 
} 

UPDATE Here我问GTM-OAuth2用户讨论组中同样的问题。这是在我回答问题后发生的,但我忘记了在这里更新我的答案。总之这是我做过什么:

  • 使用两种Facebook的SDK和GTMOAuth2为静态库(大概这是没有必要的)
  • here
  • 获取最新版本SBJSON与替换的Facebook SDK的SBJSON这一个
  • 删除GTM-的OAuth2的SBJSON来源(或从构建阶段删除)

这使你与包括外交事务委员会的最最新SBJSON库电子书SDK。 Facebook SDK和GTM-OAuth2都将使用该SDK。它应该工作。

1

是删除GTMOAuth2库的SBJSON(因为它是旧版本)。

+0

好吧,但我不完全确定哪一个是最新的。 –

+0

好吧不是一个问题删除任何你想要的。你的工作也可以用旧的完成。 – Ishu

+0

不幸的是,它似乎没有工作。它给了我一个异常'NSInvalidArgumentException,原因: - [SBJsonParser objectWithString:错误:]:无法识别的选择发送到实例0x45bb1c0'我不知道究竟是什么错误,但它是有关json解析器,如果没有别的作品,我可能修改oauth库,使其与从Facebook的js解析器工作# –

相关问题