Ż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 NSObject
i których setValue:forKey
używałem. Za każdym razem, gdy setValue:forKey
pró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:forKey
wiersze i stwierdziłem, że mój default
przypadek instrukcji switch działa String?
.
W końcu doszedłem do wniosku, że nie można używać opcjonalnych szybkich typów, setValue:forKey
chyba ż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ć Bool
i 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