2009-09-09 9 views
12

है iPhone संदर्भ पुस्तकालय - UIApplication कहता है कि मैं UIApplication उपवर्ग कर सकते हैं, लेकिन अगर मैं यह कोशिश मैं एक अपवाद मिल जाएगा:यूआईपीप्लिकेशन को कैसे घटाया जाए?

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'There can only be one UIApplication instance.' 

यह मैं हाईलेंडर की याद दिलाता है "केवल एक नहीं हो सकता है ,. :-)

मैं अन्य argurments UIApplicationMain को पारित करने के लिए है? या मैं पुस्तकालय में somthing missread किया?

+0

http://stackoverflow.com/questions/26213279/objective-c-project-with-swift-uiapplication-subclass-error-class-not-loaded – Gangadhar

उत्तर

24

क्या आपने अपने उप-वर्ग का नाम UIAplicationMain पर पास किया था? मान लेते हैं आप

@interface MyUIApp : UIApplication 
... 
तो मुख्य में

() आपको क्या करना चाहिए करते हैं:

NSString* appClass = @"MyUIApp"; 
NSString* delegateClass = nil; 
int retVal = UIApplicationMain(argc, argv, appClass, delegateClass); 
+0

हाय, मैंने जवाब में सुझाए गए तरीके की कोशिश की है ... लेकिन मुझे अभी भी वही त्रुटि मिल रही है ... मुझे और कुछ करने की ज़रूरत है ...? –

+0

मैं इस "MyUIApp" वर्ग की ऑब्जेक्ट को कैसे पुनः प्राप्त कर सकता हूं? – Mangesh

+0

MyUIApp * ऐप = [यूआईपीप्लिकेशन साझा अनुप्रयोग]; –

10

को अपने ऐप्लिकेशन के Info.plist में, आप अपने उपवर्ग के नाम के NSPrincipalClass कुंजी बदलना सुनिश्चित करें। यह हूँ एप्लिकेशन लोड होने पर कोको को सही कक्षा को तुरंत चालू करें - आपको करना चाहिए अपने सबक्लास काम करने के लिए इसके अलावा कुछ भी नहीं करना है।

+0

मेरी info.plist में कोई NSPrincipalClass कुंजी नहीं है। क्या मुझे इसे जोड़ना चाहिए? – masche

+0

हां - कई जानकारी हैं जो आपकी Info.plist में हो सकती हैं - वे सभी डिफ़ॉल्ट रूप से शामिल नहीं हैं। – iKenndac

+3

यह केवल मैक ओएस एक्स लगता है, आईफोन ओएस के लिए नहीं: http://developer.apple.com/iphone/library/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251 -एसडब्ल्यू 1 – Eonil

-4

वहाँ केवल एक आवेदन में एक UIApplication उदाहरण हो सकता है, तो आप एक नया आवेदन वस्तु प्रारंभ नहीं करना चाहिए, का उपयोग यूआईपीप्लिकेशंस की स्थैतिक विधि: + (यूआईएप्लिकेशंस *) साझा अनुप्रयोग।

0

मैं जानता हूँ कि यह एक पुराने एक है और स्वीकार किए जाते हैं जवाब ठीक है, लेकिन यह स्पष्ट करने के लिए ...

मान लीजिए कि आप करते हैं:

UIApplication subclassed रूप MyApplication

UIApplicationDelegateMyAppDelegate रूप subclassed

फिर आपका मुख्य। एम इस तरह दिखेगा:

#import <UIKit/UIKit.h> 

#import "MyApplication.h" 
#import "MyAppDelegate.h" 

int main(int argc, char * argv[]) 
{ 
    @autoreleasepool 
    { 
     return UIApplicationMain(argc, 
           argv, 
           NSStringFromClass([MyApplication class]), 
           NSStringFromClass([MyAppDelegate class]));     
    } 
} 

यदि आपने UIApplication या UIApplicationDelegate उपखंड नहीं किया है तो आप nil को UIApplicationMain पर संबंधित पैरामीटर के रूप में पास करते हैं।

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