【问题标题】:Problem with duplicate classes in JSON frameworks ? [duplicate]JSON 框架中的重复类有问题吗? [复制]
【发布时间】:2011-08-09 07:11:14
【问题描述】:

可能重复:
What is the best way to solve an Objective-C namespace collision?

在我的应用程序中,我使用了 SBJSON 框架 (Stig Brautaset's) 来与我的 json api 进行交互,并且一切都运行良好。

但现在我可以通过 facebook SDK 使用 Facebook SSO。所以我按照Facebook developer site.中的指示将facebook sdk包含到我的项目中

但问题是,facebook sdk 也使用了一些 SBJSON 类,如 SBJsonParser、SBJsonWriter 等,这些类已经存在于我使用的 SBJSON 框架中。这些类名称相似,但方法和属性不同。所以我既不能删除,也不能编辑它们中的任何一个。 (我是初学者,我不知道如何在不丢失任何东西的情况下编辑它们)。

因此,由于重复的类,它显示了许多错误。

我可以在这里做什么?请帮帮我:)

下面给出了两个 JSonParser 类的头文件 (.h)。 (.m 文件太长,这里不能给出。)

下面给出的 Facebook SDK 中使用的 JSonParser.h

#import <Foundation/Foundation.h>
#import "SBJsonBase.h"

@protocol SBJsonParser
- (id)objectWithString:(NSString *)repr;

@end

@interface SBJsonParser : SBJsonBase <SBJsonParser> {

@private
const char *c;

}   
@end


@interface SBJsonParser (Private)

- (id)fragmentWithString:(id)repr;

@end

在下面给出的 SBJson 框架中使用的JSonParser.h

#import <Foundation/Foundation.h>

@interface SBJsonParser : NSObject {


NSString *error;
NSUInteger depth, maxDepth;

}

@property NSUInteger maxDepth;

@property(copy) NSString *error;

- (id)objectWithData:(NSData*)data;

- (id)objectWithData:(NSData*)data;

- (id)objectWithString:(NSString*)jsonText error:(NSError**)error;


@end

谢谢你:)

【问题讨论】:

  • 你解决过这个问题吗?我现在有同样的问题..

标签: iphone objective-c facebook duplicates sbjson


【解决方案1】:

您需要决定保留哪个 SBJson 实现,然后从项目设置中手动删除另一个。

主要问题是有很多优秀的 iOS 开源可用。但是这个开源的分发方法充其量是晦涩难懂的。没有比在 U 盘上复制代码更先进或更简单的方法了。

我写了一篇较长的博客文章,标题为iOD 开源的状态:以及如何处理它http://blog.jayway.com/2011/05/16/the-state-of-ios-open-source-and-what-to-do-about-it/

我的建议是使用将 Xcode 项目作为其他 Xcode 项目的依赖项的能力。它效果很好,我已经使用这种方法超过 5 年了,效果很好。

【讨论】:

  • 感谢您的回复 :) 但我无法删除任何框架,因为两者都是我的项目所必需的。我正在寻找其他解决方案。
  • @S.Philip - 不删除框架。您必须进入其中一个框架并从中删除重复的文件。这是大多数 iOS 框架的主要缺陷;如果您将它们组合起来,它们中的极少数会按原样工作,并且它们之间几乎不存在重复使用。
【解决方案2】:

试试这个:

  • 通过删除对文件的引用来删除其中一个框架。
  • 选择每个重复的类,然后选择代表名称的单词(如JSonParser.h)。
  • 在 Xcode 中,使用“重构...”菜单项对其进行重命名。
  • 重新导入已删除的框架。

确保您之前制作了快照,以便在出现问题时可以恢复。

【讨论】:

  • 非常感谢您的回复:)
猜你喜欢
  • 1970-01-01
  • 2019-10-18
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2020-07-24
  • 1970-01-01
相关资源
最近更新 更多