ta klasa nie pasuje do kodowania wartości klucza dla klucza authView


Kiedy uruchamiam moją aplikację na symulatorze, działa dobrze, kiedy próbuję użyć urządzenia, nie działa i otrzymuję następujące błędy:

NOTE
: Nie znalazłem w moim kodzie żadnej klasy authView
2011-02-24 12:04:14.472 TestP[473:307] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<TestP 0x19d2b0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key authView.'
*** Call stack at first throw:
(0 CoreFoundation 0x33ac0987 __exceptionPreprocess + 114
1 libobjc.A.dylib 0x3347b49d objc_exception_throw + 24
2 CoreFoundation 0x33ac0705 -[NSException dealloc] + 0
3 Foundation 0x3367db4f -[NSObject(NSKeyValueCoding) setValue:forUndefinedKey:] + 182
4 Foundation 0x3367d03b _NSSetUsingKeyValueSetter + 90
5 Foundation 0x3367eda3 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 194
6 Foundation 0x33630b17 -[NSObject(NSKeyValueCoding) setValue:forKeyPath:] + 130
7 UIKit 0x3224c60f -[UIRuntimeOutletConnection connect] + 66
8 CoreFoundation 0x33a63fc7 -[NSObject(NSObject) performSelector:] + 18
9 CoreFoundation 0x33a6cd51 -[NSArray makeObjectsPerformSelector:] + 388
10 UIKit 0x3224b577 -[UINib instantiateWithOwner:options:] + 586
11 UIKit 0x3224cb39 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 92
12 UIKit 0x3209e871 -[UIApplication _loadMainNibFile] + 96
13 UIKit 0x3209a1fd -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 180
14 UIKit 0x3206648b -[UIApplication handleEvent:withNewEvent:] + 1114
15 UIKit 0x32065ec9 -[UIApplication sendEvent:] + 44
16 UIKit 0x32065907 _UIApplicationHandleEvent + 5090
17 GraphicsServices 0x33b0ef03 PurpleEventCallback + 666
18 CoreFoundation 0x33a556ff __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 26
19 CoreFoundation 0x33a556c3 __CFRunLoopDoSource1 + 166
20 CoreFoundation 0x33a47f7d __CFRunLoopRun + 520
21 CoreFoundation 0x33a47c87 CFRunLoopRunSpecific + 230
22 CoreFoundation 0x33a47b8f CFRunLoopRunInMode + 58
23 UIKit 0x32099309 -[UIApplication _run] + 380
24 UIKit 0x32096e93 UIApplicationMain + 670
25 TestP 0x00002213 main + 98
26 TestP 0x000021ac start + 40)
terminate called after throwing an instance of 'NSException'

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Prawdopodobnie masz pomieszane rzeczy właściciela pliku w xibs. Ten wyjątek jest zgłaszany podczas rozpakowywania końcówek (o czym świadczy
+ [UINib ...]
w śladzie wstecznym). Próbuje połączyć zdefiniowane przez Ciebie
IBOutlets
.
Jeden z Twoich widoków jest skonfigurowany jako właściciel pliku
authView
. Jednak gdy przychodzi czas na rozpakowanie końcówki, właściciel nie ma właściwości
authView
, więc rozpakowywanie kończy się niepowodzeniem.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

@Dave DeLong wskazał w prawo.

Obejście problemu

  • Znajdź, kiedy zostanie zgłoszony wyjątek, że viewController jest załadowany.
  • Następnie sprawdź plik wskazówek w viewController, w xib powinien znajdować się
    IBOutlet
    , ale może go brakować w pliku viewController.h lub może brakować jakiejś kontrolki plik xib.


Dlaczego warto uruchomić w symulatorze?

Czasami kończy się niepowodzeniem.
Po prostu podejmij kroki
  • Kompilacja - & > Jasny
  • Kompilacja - & > Wyczyść wszystkie cele

Teraz uruchamia prawdziwy kod, może problem został rozwiązany na urządzeniu, a może zaczął rzucać wyjątek w symulatorze, jeśli naprawdę jest problem. (Wspomniałem już o obejściu)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W ten sposób rozwiązałem ten problem. Poszedłem do pliku „Story Board” i wybrałem widok, który powodował problemy. Następnie kliknąłem kartę
Inspektor połączeń
i zobaczysz połączenia z wykrzyknikami po prawej stronie zamiast pełnych kółek. Usuń je i w razie potrzeby dostosuj. Zapisz & > uruchom aplikację i powinna działać. Mam nadzieję że to pomoże :)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Myślę, że jednym z możliwych powodów wyrzucenia tego wyjątku jest zmiana nazwy jakiejś zmiennej IBOutlet po tym, jak połączenia scenorysu zostały już wykonane. Tak więc element interfejsu użytkownika w scenorysie nadal odwołuje się do starej nazwy zmiennej. Rozwiązałem ten problem samodzielnie, sprawdzając widok XML scenorysu (kliknij prawym przyciskiem myszy plik .storyboard i otwórz jako źródło) i usuwając starą (niepotrzebną) nazwę zmiennej IBOutlet.
Na przykład załóżmy, że masz jeden UITextField na scenorys i masz do niego odpowiednią właściwość:
@property (retain, nonatomic) IBOutlet UItextField *myTextField;

Łączysz element UI w scenorysie z tą właściwością, a następnie decydujesz się jakoś zmienić nazwę zmiennej. Teraz, jeśli klikniesz prawym przyciskiem myszy UITextField w scenorysie, zauważysz, że istnieją dwa wyjścia referencyjne - stare i nowe. Możesz usunąć stary plik, klikając przycisk ze znakiem „x” w Inspektorze połączeń lub edytując wariant XML scenorysu pliku.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

coś poszło nie tak, gdy w xcode 4 z jakimś linkiem, ponieważ zadeklarowałem IBOutlet, że link authView został uruchomiony i zadziałał! potem usunąłem deklarację IBOutlet i działało dobrze
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Właśnie wyczyściłem projekt i usunąłem aplikację z urządzenia i znowu zadziałało. Błąd był związany z widokiem, który już usunąłem.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W moim przypadku było jeszcze bardziej przerażająco. Miałem XIB związany z VC, który całkowicie usunąłem, ponieważ służył tylko do kodu. Symulator uruchom ładnie, ale systematycznie spadaj na urządzenie.
Więc sprzątam, odbudowuję, zamykam Xcode, idę coś przekąsić i wrzeszczę na Maca. Nic, kompilator wskazywał na nieistniejący przycisk na nieistniejącym XIB.
Próbowałem zmienić nazwę klasy i udało się!
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zauważyłem, że te błędy występują najczęściej podczas dołączania właściwości, ich edycji i ponownego łączenia ... analizuj inspektora połączeń pod kątem nieoczekiwanych wartości pozostałych po utworzonym i zniszczonym połączeniu.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Prawdopodobnie utworzyłeś IBOutlet, a następnie usunąłeś go, a następnie podłączyłeś nowy, ale w „Inspektorze” xib zapomniałeś usunąć referencję i masz teraz zduplikowaną referencję IBOutlet, której kompilator nie może znaleźć.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wygląda na to, że konstruktor interfejsu nie działał zgodnie z oczekiwaniami.
Jak sugerowano wcześniej, spróbuj wyczyścić i odbudować. Jeśli to nie zadziała, sugeruję odtworzenie interfejsu xib. U mnie to zadziałało w podobnym przypadku.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się