Żeby dodać do tego, bo również otrzymywałem ten błąd. Przeglądając wszystkie te odpowiedzi, większość wydaje się dotyczyć pracy z interfejsem użytkownika i elementami scenorysu. Wiem, że oryginalny plakat wydawał się działać z interfejsem użytkownika, ale podczas wyszukiwania możliwych przyczyn tego błędu przeważnie wszystkie pytania prowadzą do tego pytania, a inne są zamknięte jako duplikaty lub po prostu mają problemy z łączeniem rzeczy w scenariuszu, więc zrobię to dodaj moje rozwiązanie.
Pracowałem nad kodowaniem usługi internetowej w Swift 2. Zbudowałem wszystkie potrzebne obiekty proxy i kody pośredniczące. Gdy przeglądałem zwrócony XML, dynamicznie tworzyłem instancję moich obiektów, z których wszystkie pochodziły NSObjecti których setValue:forKeyużywałem. Za każdym razem, gdy setValue:forKeypróbowano ustawić właściwość, wybuchał ten błąd.
Miałem instrukcji switch dla każdego typu miałem do czynienia z (na przykład Bool?, CShort?, String?) i dla każdego węzła XML ja przeszedłem i sprawdziła, jaki typ był na obiekcie, a następnie konwertowane do wartości tego typu i próbował ustawić go setValue:forKey.
W końcu zacząłem komentować wszystkie te setValue:forKeywiersze i stwierdziłem, że mój defaultprzypadek instrukcji switch działa String?.
W końcu doszedłem do wniosku, że nie można używać opcjonalnych szybkich typów, setValue:forKeychyba że mają bezpośrednie mapowanie na typ Objective-C, taki jak String?lub NSNumber?. Skończyło się na zmianie wszystkich CShort?typów na, NSNumber?ponieważ ma to bezpośrednie mapowanie. W Bool?moim przypadku było dla mnie w porządku po prostu użyć Booli zainicjować false. Inni mogą nie mieć tego luksusu.
W każdym razie, jaki ból głowy był tak miejmy nadzieję, pomaga to komuś, kto ma podobny problem i ciągle zostaje przekierowany na to pytanie i mówi do siebie: „Nie robię nic w interfejsie użytkownika !!”.
Wreszcie, aby powtórzyć jeszcze raz, kodowanie klucz-wartość nie działa z opcjami. Poniżej znalazłem gdzieś, ale zapominam, gdzie to napisałem, przepraszam i dziękuję, jeśli pamiętam, gdzie to znalazłem, ale uratowało mi to życie:
Nie można używać KVC we właściwości Optional Int, ponieważ KVC to Cocoa / Objective-C, a Objective-C nie widzi Optional Int - nie jest połączony z Objective-C. Cel C widzi tylko typy, które są połączone z celem C:
typy klas pochodzące z NSObject
typy klas, które są widoczne w @objc
Szybkie struktury, które są zmostkowane