11

हालांकि एक्सकोड 4 को साझा कार्यक्षेत्र में परियोजनाओं के क्रॉस-प्रोजेक्ट कक्षाओं के बारे में जागरूक होने का विज्ञापन दिया गया है, मुझे यह काम नहीं मिला और समस्या के बारे में कुछ शोध किया । यहां पर कई धागे में चर्चा की गई सामान्य समाधान एक स्थिर पुस्तकालय बनाने और इसके खिलाफ अपनी परियोजनाओं को जोड़ने के लिए है।एक्सकोड 4, इंटरफेस बिल्डर और एक स्टेटिक लाइब्रेरी में कक्षाओं की जागरूकता

इसलिए मैंने जोना की मार्गदर्शिका (http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/) का पालन किया और कई परियोजनाओं के साथ UIView के अक्सर उपयोग किए गए उप-वर्गों को साझा करने के लिए एक स्थिर लाइब्रेरी बनाई।

कुछ परीक्षण और त्रुटि के अनुभव और समस्या निवारण के साथ, मैं इस समाधान वास्तव में संतोषजनक और साफ पाया है, लेकिन अभी भी कुछ जटिलताएं हैं:

(1) एक स्थिर पुस्तकालय XIB फ़ाइलों को साझा करने

बाद में असमर्थ है मैंने जो शोध किया, वह स्थिर पुस्तकालय प्रोजेक्ट के बाहर से XIB फ़ाइलों तक पहुंचने के लिए असंभव प्रतीत होता है, जिसमें उन्हें संदर्भ बनाने के लिए आवश्यक प्रत्येक परियोजना में खींचकर उन्हें शामिल किया गया है। स्थाई लाइब्रेरी में एक UIViewController उपclass को देखते हुए जिसे XIB से लोड किया जाना चाहिए - हालांकि UIViewController subclass किसी भी प्रोजेक्ट से स्थिर है जो स्थिर लाइब्रेरी के विरुद्ध लिंक करता है, आप उस प्रोजेक्ट में XIB फ़ाइल को जोड़ने के बिना 'initWithNibName' को कॉल नहीं कर सकते हैं।

मैंने प्रत्येक परियोजना में स्थिर पुस्तकालय की एक्सआईबी फाइलों के संदर्भ बनाकर अस्थायी रूप से इस मुद्दे को हल किया - क्या मुझे एक बेहतर समाधान है?

(2) हालांकि मैं एक वस्तु के वर्ग मैं में एक XIB में घसीटा के रूप में मेरे स्थिर पुस्तकालय में UIView के उपवर्गों में से एक का चयन कर सकते इंटरफ़ेस बिल्डर एक स्थिर पुस्तकालय

में कक्षाओं के बारे में पता नहीं है मेरी प्रोजेक्ट (स्वत: पूर्णता के साथ भी), मुझे इंटरफ़ेस बिल्डर फ़ाइल में "अज्ञात वर्ग [UIViewSubclassName] कहने वाले रनटाइम पर एक त्रुटि मिलती है"।

जो समाधान मैंने पाया - Interface Builder can't see classes in a static library - (इंटरफ़ेस बिल्डर को क्लास को पहचानने के लिए हेडर फ़ाइल को XIB-Browser में खींचना) स्पष्ट रूप से नए एक्सकोड 4 के साथ काम करना बंद कर दिया - एक्सआईबी-ब्राउज़र एकल विंडो में विलय हो गया है -इंटरफेस और इसमें हेडर फ़ाइलों को खींचने का जवाब नहीं देता है।

मैं अपने एक्सआईबी को एक स्थिर लाइब्रेरी से ऑब्जेक्ट्स कैसे शामिल कर सकता हूं (उदा। मेरे प्रोजेक्ट में एक UIViewController सबक्लास जिसमें कुछ बटन शामिल होते हैं जिन्हें मैं अक्सर उपयोग करता हूं और इसलिए मेरी स्थिर लाइब्रेरी में शामिल होता है) रनटाइम पर अपवाद फेंक दिए बिना?

बहुत बहुत धन्यवाद!

पुनश्च: इन त्रुटियों में से कुछ कोड है कि मुद्दों के बिना सिम्युलेटर के लिए संकलित के साथ हो, लेकिन त्रुटियों फेंक जब डिवाइस के लिए निर्माण ...

+3

मैं वास्तव में समस्या का जवाब मिल गया (2): CLA एसईएस जो केवल एक्सआईबी में उपयोग किए जाते हैं, निर्मित उत्पाद में शामिल नहीं होते हैं क्योंकि संकलक आक्रामक रूप से कक्षाओं को अनदेखा करता है जिन्हें कोड में कहीं भी नहीं कहा जाता है। कोड में किसी भी स्थान पर किसी भी वर्ग विधि (जैसे [फू क्लास]) की एक छोटी कॉल समस्या हल करती है। – knl

उत्तर

5

मैं ने वही समस्या थी और पर एक वर्ग की घोषणा के द्वारा इसे हल कक्षा में मैं परियोजना में शामिल होना चाहता था। इसने कक्षा को स्थिर पुस्तकालय से लोड करने के लिए मजबूर किया। कक्षा में परिभाषित कोई वास्तविक विधि नहीं थी।

कुछ अन्य विकल्प है कि आमतौर पर लिंकर झंडे -ObjC की स्थापना की तरह के बारे में bandied और कोड के लिए अनुरोध के जवाब में

** अद्यतन -all_load कर रहे हैं।

मैंने "क्लास लोड को मजबूर करने के लिए श्रेणियों" नामक प्रोजेक्ट में एक समूह जोड़ा और उदाहरण के लिए, "SimpleAppStateManager" वर्ग को इस परियोजना में शामिल करने के लिए मजबूर करने के लिए (जिसे साझा स्थैतिक पुस्तकालय में परिभाषित किया गया था) ने इन ' खाली 'श्रेणी फाइलें:

SimpleAppStateManager + DART.h

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

@interface SimpleAppStateManager (DART) 
@end 

SimpleAppStateManager + DART.m

#import "SimpleAppStateManager+DART.h" 

@implementation SimpleAppStateManager (DART) 
@end 
+0

मुझे पता है कि एक नेक्रो टिप्पणी का थोड़ा सा है लेकिन क्या आप इस पर अधिक जानकारी दे सकते हैं? एक कोड नमूना शायद? – Goz

+0

ने मेरा उत्तर गोज़ अपडेट किया। चीयर्स –

+0

धन्यवाद :) बहुत उपयोगी :) – Goz

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