2011-08-09 14 views
5

Powiel możliwe:
What is the best way to solve an Objective-C namespace collision?Problem z powielonymi klasami w frameworkach JSON?

W mojej aplikacji użyłem ramy SBJSON (Stig Brautaset), aby współdziałać z moim json api i wszystko działało bardzo dobrze.

Ale teraz jestem w stanie korzystać z usługi Facebook SSO przy użyciu Facebook SDK. Więc obejmowały facebook SDK do mojego projektu zgodnie z instrukcją w Facebook developer site.

Ale problem to, że Facebook SDK też stosować niektórych klas SBJSON jak SBJsonParser, SBJsonWriter, etc, które są już obecne w SBJSON ramy, które użyłem. Klasy te są podobne pod względem nazwy, ale różnią się metodami i właściwościami. Nie mogę więc usunąć ani edytować żadnego z nich. (Jestem początkującym i nie wiem jak je edytować bez utraty czegokolwiek).

Pokazuje więc wiele błędów z powodu zduplikowanych klas.

Co mogę zrobić? Proszę mi pomóc :)

Pliki nagłówkowe (.h) obu klas JSonParser podano poniżej. (Pliki .m nie można podać tutaj, ponieważ są one zbyt długie.)

JSonParser.h, który jest używany w Facebooku SDK podane poniżej

#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 

JSonParser.h, który jest używany w SBJson Framework podano poniżej

#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 

Dziękuję :)

+0

Czy kiedykolwiek naprawiłeś to? Mam teraz ten sam problem ... – Foo

Odpowiedz

0

Musisz zdecydować, w hich SBJson do utrzymania, a następnie ręcznie usuwając drugi z konfiguracji projektu.

Głównym problemem jest to, że istnieje całe mnóstwo otwartych źródeł dobrego systemu iOS. Ale metody rozpowszechniania tego open source są w najlepszym razie tajemne. Żadnych bardziej zaawansowanych ani głupich dowodów niż kopiowanie kodu na pendrive'ach USB.

Pisałem dłuższy blogu na ten temat pt stanu IOD Open Source, a co z tym zrobić: http://blog.jayway.com/2011/05/16/the-state-of-ios-open-source-and-what-to-do-about-it/

Moja sugestia jest wykorzystanie możliwości mają projekty Xcode jako zależności dla inne projekty Xcode. Działa dobrze, a tę metodę stosuję od ponad 5 lat z dobrymi wynikami.

+0

Dziękuję za odpowiedź :) ale nie mogę usunąć żadnego z frameworków, ponieważ oba są niezbędne dla mojego projektu. Szukam innego rozwiązania. –

+0

@ S.Philip - Nie usuwa ram. Musisz wejść do jednego z framworks i usunąć z niego duplikaty plików. To jest główna wada większości frameworków iOS; bardzo niewiele z nich działa tak, jak jest, jeśli je łączysz, a ponowne użycie między nimi jest prawie nieistniejące. – PeyloW

0

Spróbuj tego:

  • Usuń jedną z ram poprzez usunięcie odniesienia do plików.
  • Wybierz każdą z powielonych klas i wybierz słowo reprezentujące nazwę (np. JSonParser.h).
  • W Xcode użyj pozycji menu "Refaktor ...", aby zmienić nazwę.
  • Ponownie zaimportuj usunięte ramy.

Pamiętaj, aby zrobić migawkę wcześniej, aby móc wrócić, jeśli coś pójdzie nie tak.

+0

Dziękuję bardzo za odpowiedź :) –

Powiązane problemy