Programuję aplikację szybko i po uruchomieniu aplikacji testowej na symulatorze iPhone'a wszystko działa, ale potem próbuję przesunąć w prawo, co jest gestem, który dodałem, aby przejść do następnej strony (Zobacz kontroler drugi) ulega awarii i pokazuje ten raport o błędach w dzienniku konsoli.
2014-10-18 12:07:34.400 soundtest[17081:818922] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<soundtest.ViewControllerTwo 0x7f92f1f20090> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key sfdfa.'
*** First throw call stack:
(
0 CoreFoundation 0x00000001067813f5 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x00000001082afbb7 objc_exception_throw + 45
2 CoreFoundation 0x0000000106781039 -[NSException raise] + 9
3 Foundation 0x0000000106b984d3 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 259
4 CoreFoundation 0x00000001066cb400 -[NSArray makeObjectsPerformSelector:] + 224
5 UIKit 0x00000001072ce97d -[UINib instantiateWithOwner:options:] + 1506
6 UIKit 0x000000010712f698 -[UIViewController _loadViewFromNibNamed:bundle:] + 242
7 UIKit 0x000000010712fc88 -[UIViewController loadView] + 109
8 UIKit 0x000000010712fef9 -[UIViewController loadViewIfRequired] + 75
9 UIKit 0x000000010713038e -[UIViewController view] + 27
10 UIKit 0x00000001076cd83f -[_UIFullscreenPresentationController _setPresentedViewController:] + 65
11 UIKit 0x000000010710bc49 -[UIPresentationController initWithPresentedViewController:presentingViewController:] + 105
12 UIKit 0x000000010713c121 -[UIViewController _presentViewController:withAnimationController:completion:] + 1746
13 UIKit 0x000000010713e461 __62-[UIViewController presentViewController:animated:completion:]_block_invoke + 132
14 UIKit 0x000000010713e385 -[UIViewController presentViewController:animated:completion:] + 229
15 UIKit 0x00000001073bb9d6 _UIGestureRecognizerSendActions + 262
16 UIKit 0x00000001073ba679 -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 532
17 UIKit 0x00000001073bf296 ___UIGestureRecognizerUpdate_block_invoke662 + 51
18 UIKit 0x00000001073bf192 _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 254
19 UIKit 0x00000001073b520d _UIGestureRecognizerUpdate + 2796
20 UIKit 0x00000001070520a6 -[UIWindow _sendGesturesForEvent:] + 1041
21 UIKit 0x0000000107052cd3 -[UIWindow sendEvent:] + 667
22 UIKit 0x000000010701fae1 -[UIApplication sendEvent:] + 246
23 UIKit 0x000000010702cbad _UIApplicationHandleEventFromQueueEvent + 17370
24 UIKit 0x0000000107008233 _UIApplicationHandleEventQueue + 1961
25 CoreFoundation 0x00000001066b6ad1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
26 CoreFoundation 0x00000001066ac99d __CFRunLoopDoSources0 + 269
27 CoreFoundation 0x00000001066abfd4 __CFRunLoopRun + 868
28 CoreFoundation 0x00000001066aba06 CFRunLoopRunSpecific + 470
29 GraphicsServices 0x000000010a1699f0 GSEventRunModal + 161
30 UIKit 0x000000010700b550 UIApplicationMain + 1282
31 soundtest 0x000000010624503e top_level_code + 78
32 soundtest 0x000000010624507a main + 42
33 libdyld.dylib 0x000000010ae4a145 start + 1
34 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
cmmd + F
aby móc przeszukiwać konsolę i szukać aplikacji kończącej z powodu nieprzechwyconego wyjątku , dokładnie 1 wiersz po tym zobaczysz przyczynę: która mówi o przyczynie awarii aplikacji. (tak, miałem ten błąd zbyt wiele razy :)Odpowiedzi:
CMYR - „może się również zdarzyć, jeśli podłączysz przycisk do IBAction, który już nie istnieje (lub został przemianowany)”
Jeśli napotykasz ten problem, upewnij się, że idziesz do Main.storyboard, PRAWO kliknij ikonę żółtego pola (kontroler widoku) u góry konspektu telefonu i USUŃ gniazdka z żółtymi flagami.
To, co dzieje się w takich przypadkach, to prawdopodobnie nazwa działania, a następnie zmiana jego nazwy. Musisz usunąć starą nazwę, a jeśli to był jedyny problem, rozpocznie się od razu w SIM!
źródło
Czy ustawiłeś zmienną OS_ACTIVITY_MODE przez przypadek? Aby sprawdzić, czy ta zmienna jest ustawiona (i ją wyłączyć), w Xcode 9 wykonaj następujące czynności:
Select from Xcode menu Product -> Scheme -> Edit Scheme.. Select the Run scheme and look under Arguments. If you see the OS_ACTIVITY_MODE variable checked, deselect it
źródło
W Xcode 9 i Swift 4:
Wydrukuj stos wyjątków, aby poznać przyczynę wyjątku:
Dodaj (+) Dodaj punkt przerwania wyjątku.
Wybierz nowy punkt przerwania, kliknij z wciśniętym klawiszem Control, edytuj punkt przerwania.
źródło
W moim przypadku wywołałem metodę delegowaną, ale metoda ta nie została zadeklarowana.
Ten błąd jest ogólny i może pojawić się z wielu powodów. Upewnij się, że nie wyłączyłeś swoich dzienników, aby zobaczyć, co się stało. Włącz OS_ACTIVITY_MODE w schematach, jeśli ją wyłączyłeś. Możliwe, że został wyłączony, aby zapobiec wielu niepotrzebnym dziennikom, ale są one przydatne.
Możesz także prześledzić przyczynę bardziej szczegółowo, dodając punkt przerwania wyjątku
po $arg1
. Jak już wspomniano Ahmed-LotfiOto wspólna lista kontrolna, przez którą można przejść.
źródło
Inne rozwiązania nie działały u mnie, oto moje. Dotyczy tylko Xcode 8, gdy działa w starszym trybie Swift 2.3 :
Wygląda na to, że Konstruktor interfejsów próbuje zmienić nazwę metody, którą należy podłączyć do przycisku.
Oto radar z dodatkowymi szczegółami.
Rozwiązaniem (obejście) jest ręczne zastąpienie nazwy parametru metody na
_
:Zmień na:
źródło
Może to być również niepoprawna nazwa identyfikatora segmentu. Np. -
źródło
Moja sytuacja była trochę inna, starałem się segregować w
UINavigationController
, a to, co mnie naprawiło, to zdobycie głównej kolejki.Dla celu C:
W przypadku Swift 3:
źródło
Zdarzyło mi się to na Xcode 7 i nie miałem gniazdek z żółtymi flagami, które mogłem usunąć.
Jedyną rzeczą, która działała dla mnie, było zastąpienie tej linii w AppDelegate:
do:
źródło
Dla mnie problemem był mój IBAction z przyciskiem UIB.
Kiedy Ctrl + Przeciągnij, aby utworzyć IBAction z UIButton, pamiętaj, aby wybrać „UIButton” z menu rozwijanego Typ. Domyślny wybór AnyObject powoduje awarię aplikacji po dotknięciu przycisku UIB.
źródło
Może to być również uszkodzony Segmenty wyzwalane, sprawdź w swojej scenorysie, gdy tylko ponownie połączysz sekwensy lub ujdziesz, wszystko powinno znowu działać.
Upewnij się, że
Identifier
Segue jest poprawny i podobny do Twojego kodu .źródło
Natknąłem się na ten problem, kiedy zmieniłem nazwę zmiennej, która była podłączona do jednego z moich przycisków. Miej to na uwadze!
źródło
Jestem nowy w Xcode, więc zajęło mi kilka godzin, aby znaleźć problem, aby załadować plik xls. Prześledziłem większość przykładowych kodów tam i żaden z nich nie rozwiązuje pokazanego błędu Xcode.
Rozwiązaniem, które znalazłem, było określenie „Dodaj do celów:” zaznacz projekt, który chcesz dodać, gdy importujemy plik xls do Xcode, przeciągając go i upuszczając w Projekt -> Pliki pomocnicze.
źródło
może być więcej niż 1 IBAction dla przycisku w kontrolerze widoku, spróbuj je znaleźć i usunąć wszystkie poprzednie pozycje dla tego przycisku w kontrolerze i utwórz nowy przycisk. To rozwiąże problem.
źródło
Upewnij się, że dynamicznie nie stosujesz względnych ograniczeń do widoku, którego jeszcze nie ma w hierarchii widoku.
W powyższym przykładzie bottomView został włączony do hierarchii widoków przed zastosowaniem względnych ograniczeń.
źródło
Wystąpił ten błąd na 2 następujące sposoby:
Ten błąd pojawiał się, gdy przepychałem inny kontroler UIViewController.
JEDNAK przez pomyłkę podklasowałem drugą klasę
UITabBarController
i otrzymywałem ten błąd.Jak to naprawić? Podklasowałem
UIViewController
i już się nie zawieszałem :)Nie chciałem używać scenorysu. Więc go usunąłem. Jednak zapomniałem usunąć odniesienie w ustawieniach projektu . Właśnie kliknąłem projekt >> Ogólne >> Informacje o wdrożeniu >>, a następnie ustawiłem interfejs główny na czarną przestrzeń. (Wcześniej był ustawiony na główny)
Jak widać w obu sytuacjach, pojawia się błąd dostępu do jakiegoś obiektu, który istnieje ...
źródło
Dodam mój problem do listy możliwych rozwiązań na wypadek, gdyby ktoś spotkał się z tym wątkiem.
Identyfikator komórki TableView. Po pierwsze upewnij się, że twoja komórka ma identyfikator. Po drugie, upewnij się, że odwołujesz się do tego identyfikatora podczas usuwania z kolejki komórki.
źródło
Swift 4 :
Otrzymałem ten błąd z powodu zmiany interfejsu API UIVisualEffectView. W Swift 3 można było to zrobić:
myVisuallEffectView.addSubview(someSubview)
Ale w Swift 4 musiałem to zmienić na:
myVisualEffectView.contentView.addSubview(someSubview)
źródło
Miałem ten sam błąd, gdy miałem literówkę w jednym z widoków podczas budowania ograniczeń za pomocą formatera wizualnego. Mam nadzieję, że to pomoże komuś ... lub mnie jeszcze raz.
źródło
Jeśli używasz Reaktywuj macierzystego i Reaktywuj macierzystego Firebase, upewnij się, że łączysz plik Google-Services.plist ( https://github.com/invertase/react-native-firebase/issues/313#issuecomment-320435560 )
źródło
W moim przypadku był to UIAlertView na iPadzie: UIAlertController is Crashed (iPad) . Nie skonfigurowałem sourceView i sourceRect.
źródło
W moim przypadku, Xcode 8.2.1 , miałem kontroler widoku widoku mapy . Więc poszedłem do
i dodał
MapKit.framework
, to było w porządku.Myślę, że będzie to miało również zastosowanie do innych poglądów, które wymagają ram.
PS Działający na iOS 9 powiedział mi, że wystąpił problem z Map Kit View, a na iOS 10 nic mi nie powiedział!
źródło
Tylko rozwiązanie „drop armageddon” działało dla mnie:
źródło
W moim przypadku XCode zmęczył się i nie uruchomił aplikacji z tym komunikatem z powodu niepowodzenia asercji (ustawionego przez nasz kod).
Uruchomienie na innym urządzeniu pokazało błąd asercji, który udało nam się naprawić, i wszystko wróciło do normy.
źródło
Dla Swift 2.3
Wygląda na to, że jest to błąd w Xcode 8 i Swift 2.3, jeśli łączysz akcję przycisku ze swoim kodem za pomocą scenorysu, upewnij się, że Xcode nie zmienił nazwy akcji, dla mnie to dodaje withSender: na końcu metod , więc robię kod i zmieniam nazwę metody, aby pasowała do tej, którą napisał Xcode.
W przypadku każdej innej wersji sprawdź poprawną odpowiedź.
źródło
W moim przypadku był to InterfaceBuilder. Skopiowałem niektóre widoki z innego ViewController, który pomieszał ograniczenia.
W InterfaceBuilder miałem błąd czerwonej strzałki na ViewController.
Podczas wykonywania aplikacja uległa awarii.
źródło
W moim przypadku aplikacja uległa awarii, ponieważ nie ustawiłem docelowego członkostwa scenorysu.
źródło
W moim przypadku projekt
Build Settings
zawierał nieistniejące katalogi dlaFramework Search Paths
iLibrary Search Paths
.źródło
Miałem dwa problemy:
1) Mój cel nie zawierał kontrolera widoku, który był używany w pliku scenorysu.
2) Mój scenorys miał około 3 lat, musiałem odtworzyć jeden z kontrolerów widoku w kontrolerze paska kart od zera (miał tylko UITextField i nadal nie wiem, dlaczego to nie działało)
źródło
Jeszcze inna możliwa przyczyna:
W moim przypadku miałem
xib
i dzwoniłem,Bundle.main.loadNibNamed(...
w którym momencie się zawiesił. Wszystko mojeIBOutlets
iIBActions
wydawało się w porządku. W końcu zauważyłem, żenib
faktycznie się ładuje, ale kiedy próbowałem uzyskać dostęp do pierwszego (i jedynego) widoku (nib.first
), to nie działało. W rzeczywistościnib.count
zwracano bardzo dużą liczbę całkowitą (max int?) Zamiast oczekiwanej1
. Próbowałem ponownie dodać widok, ale nadal nie miałem szczęścia.Na koniec usunąłem cały
xib
plik i zacząłem od nowa (ale zachowałem niektóre widoki w moim schowku, więc mogę je wkleić zamiast odtwarzać ponownie).To zadziałało!
źródło
Może się to zdarzyć, jeśli masz tabelę i zapomnisz przypisać do klasy UITableViewDelegate i UITableViewDataSource
źródło