2009-09-09 8 views
12

iPhone referencyjny Libary - UIApplication mówi mogę podklasy UIApplication, ale gdy próbuję to będę się wyjątek:Jak zastosować UIApplication podklasy?

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

Przypomina mi Highlander „Nie może być tylko jeden ,. :-)

Czy muszę przechodzić inne argurments do UIApplicationMain? Albo ja missread somthing w libary?

+0

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

Odpowiedz

24

Czy przekazałeś nazwę swojej podklasy do UIApplicationMain? Załóżmy, że masz

@interface MyUIApp : UIApplication 
... 

następnie w main() należy zrobić:

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

Witam, próbowałem w taki sam sposób, jak zasugerowałem w odpowiedzi ... ale nadal otrzymuję ten sam błąd ... Coś jeszcze muszę zrobić ...? –

+0

Jak mogę pobrać obiekt klasy "MyUIApp"? – Mangesh

+0

MyUIApp * app = [UIApplication sharedApplication]; –

10

w swojej aplikacji Info.plist, upewnij się zmienić klucz NSPrincipalClass nazwy swojej podklasy. To będziesz spraw, aby kakao tworzyło odpowiednią klasę podczas ładowania aplikacji - powinieneś nie musisz robić nic poza tym, żeby twoja podklasa działała.

+0

Nie ma klucza NSPrincipalClass w moim pliku info.plist. Czy powinienem to dodać? – masche

+0

Tak - istnieje wiele, wiele kluczy, które mogą znajdować się na liście Info.plist - nie wszystkie są domyślnie włączone. – iKenndac

+3

Wydaje się, że dotyczy to tylko systemu Mac OS X, a nie systemu operacyjnego iPhone OS: http://developer.apple.com/iphone/library/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251 -SW1 – Eonil

-4

może istnieć tylko jedna instancja UIApplication w aplikacji, nie należy zainicjować jeden nowy obiekt aplikacji, należy użyć statyczna metoda UIApplication: + (UIApplication *) sharedApplication.

0

wiem, że to jest stary i zaakceptowane odpowiedź jest ok, ale aby było jasne ...

Powiedzmy masz:

UIApplication podklasy jak MyApplication

UIApplicationDelegate podklasy jak MyAppDelegate

W takim razie twój main.m powinien wyglądać następująco:

#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]));     
    } 
} 

Jeśli nie podklasę UIApplication lub UIApplicationDelegate po prostu przekazujesz nil do UIApplicationMain jako odpowiedni parametr.