2011-08-09 14 views
5

संभव डुप्लिकेट:
What is the best way to solve an Objective-C namespace collision?JSON ढांचे में डुप्लिकेट कक्षाओं के साथ समस्या?

मेरे ऐप में मैं SBJSON ढांचे का इस्तेमाल किया (स्टिग Brautaset के) मेरी json एपीआई के साथ बातचीत करने और सब कुछ बहुत अच्छी तरह से काम किया।

लेकिन अब मैं फेसबुक एसडीओ का उपयोग कर फेसबुक एसएसओ का उपयोग करने की स्थिति में हूं। तो मैं अपने प्रोजेक्ट में फेसबुक एसडीके के रूप में Facebook developer site.

में निर्देश दिए लेकिन समस्या यह है, फेसबुक एसडीके भी SBJsonParser, SBJsonWriter, आदि कि पहले से ही SBJSON रूपरेखा है कि मैं प्रयोग किया जाता में मौजूद हैं जैसे कुछ SBJSON कक्षाओं में इस्तेमाल किया शामिल थे। ये वर्ग नाम में समान हैं लेकिन विधियों और गुणों में भिन्न हैं। तो न तो मैं उन्हें हटा सकता हूं, न ही उनमें से किसी को संपादित कर सकता हूं। (मैं एक नौसिखिया हूं और मुझे नहीं पता कि कुछ भी खोए बिना उन्हें कैसे संपादित किया जाए)।

तो यह डुप्लिकेट कक्षाओं के कारण कई त्रुटियों को दिखाता है।

मैं यहां क्या कर सकता हूं? कृपया मेरी मदद करें :)

दोनों JSonParser कक्षाओं की शीर्षलेख फ़ाइलें (.h) नीचे दी गई हैं। (मीटर फ़ाइलें यहाँ नहीं दिया जा सकता है क्योंकि वे बहुत लंबी हैं।)

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 

JSonParser.h यह देखते हुए कि यह देखते हुए SBJson फ्रेमवर्क में प्रयोग किया जाता है

#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 

नीचे धन्यवाद :)

+0

क्या आपने कभी यह तय किया है? मैं अभी वही probkem है .. – Foo

उत्तर

0

आप w तय करने की जरूरत है एसबीजेसन को कार्यान्वित करने के लिए कार्यान्वयन, और फिर मैन्युअल रूप से अपने प्रोजेक्ट सेटअप से दूसरे को हटा देना।

मुख्य समस्या यह है कि बहुत अच्छा आईओएस ओपन सोर्स उपलब्ध है। लेकिन इस खुले स्रोत के वितरण के तरीकों में सबसे अच्छा आर्केन है। USB-stick पर कोड कॉपी करने से अधिक उन्नत या मूर्ख प्रमाण नहीं।

मैं IOD मुक्त स्रोत के राज्य शीर्षक विषय पर एक लंबे समय तक ब्लॉग पोस्ट में लिखा है: और इसके बारे में क्या करने के लिए: http://blog.jayway.com/2011/05/16/the-state-of-ios-open-source-and-what-to-do-about-it/

मेरे सुझाव के लिए निर्भरता के रूप में Xcode परियोजनाओं की क्षमता का उपयोग करने के लिए है अन्य एक्सकोड परियोजनाएं। यह अच्छी तरह से काम करता है, और मैंने अच्छे परिणामों के साथ 5 वर्षों से इस विधि का उपयोग किया है।

+0

उत्तर के लिए धन्यवाद :) लेकिन मैं किसी भी ढांचे को हटा नहीं सकता क्योंकि दोनों मेरे प्रोजेक्ट के लिए आवश्यक हैं। मैं चारों ओर किसी अन्य समाधान की तलाश में हूं। –

+0

@ एस फिलिप - ढांचे को हटाएं नहीं। आपको फ्रेमवर्क में से एक में जाना होगा और इससे डुप्लिकेट फाइलों को हटा देना होगा। यह अधिकांश आईओएस ढांचे की प्रमुख खामियां है; उनमें से बहुत कम काम करता है जैसे कि आप उन्हें गठबंधन करते हैं, और उनके बीच फिर से उपयोग करना काफी गैर-विद्यमान है। – PeyloW

0

इस प्रयास करें:

  • फ़ाइलों के संदर्भ हटा कर ढाँचे में से एक को हटा दें।
  • डुप्लिकेट कक्षाओं में से प्रत्येक चुनें, और नाम का प्रतिनिधित्व करने वाले शब्द का चयन करें (जैसे JSonParser.h)।
  • एक्सकोड में, इसका नाम बदलने के लिए "रिफैक्टर ..." मेनू आइटम का उपयोग करें।
  • हटाए गए ढांचे को पुनः आयात करें।

सुनिश्चित करें कि आप पहले स्नैपशॉट करें ताकि अगर कुछ गलत हो तो आप वापस कर सकते हैं।

+0

उत्तर के लिए बहुत बहुत धन्यवाद :) –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^