Chỉ để thêm vào điều này, bởi vì tôi cũng đã nhận được lỗi này. Đi qua tất cả các câu trả lời này dường như áp dụng để làm việc với giao diện người dùng và bảng phân cảnh. Tôi biết người đăng ban đầu dường như đã làm việc với UI nhưng khi tìm kiếm lý do có thể xảy ra lỗi này, hầu hết tất cả các câu hỏi đều dẫn đến câu hỏi này với những người khác bị đóng như là bản sao hoặc đơn giản là có vấn đề với việc kết nối mọi thứ trong bảng phân cảnh nên tôi sẽ thêm giải pháp của tôi.
Tôi đã làm việc về mã hóa một dịch vụ web trong Swift 2. Tôi đã xây dựng tất cả các đối tượng proxy và sơ khai cần thiết. Khi tôi lặp lại XML đã trả về, tôi đang tự động khởi tạo các đối tượng của mình, tất cả đều xuất phát NSObject
và sử dụng setValue:forKey
trên chúng. Mỗi lần setValue:forKey
cố gắng thiết lập một tài sản, nó lại xuất hiện lỗi này.
Tôi đã có một tuyên bố chuyển đổi cho mỗi loại I được giao dịch với (ví dụ Bool?
, CShort?
, String?
) và cho mỗi nút XML tôi đã đi qua và kiểm tra những gì loại là trên đối tượng và sau đó chuyển đổi các giá trị cho loại đó và cố gắng đặt nó với setValue:forKey
.
Cuối cùng, tôi bắt đầu bình luận tất cả những setValue:forKey
dòng này và thấy rằng default
trường hợp câu lệnh chuyển đổi của tôi đã hoạt động String?
.
Cuối cùng tôi đã nhận ra rằng bạn không thể sử dụng các loại swift tùy chọn setValue:forKey
trừ khi chúng có ánh xạ trực tiếp đến loại Objective-C như String?
hoặc NSNumber?
. Tôi đã kết thúc việc thay đổi tất cả các CShort?
loại thành NSNumber?
từ đó có ánh xạ trực tiếp. Vì Bool?
trong trường hợp của tôi, tôi chỉ cần sử dụng Bool
và khởi tạo nó là ổn false
. Những người khác có thể không có sự sang trọng đó.
Dù sao, điều đau đầu đến mức hy vọng điều này sẽ giúp người khác gặp vấn đề tương tự và tiếp tục được chuyển hướng đến câu hỏi này và nói với chính họ, "Tôi không làm gì trong UI !!".
Vì vậy, cuối cùng để nhắc lại một lần nữa Mã hóa khóa-giá trị không hoạt động với các tùy chọn. Bên dưới tôi đã kết thúc việc tìm kiếm ở đâu đó nhưng tôi quên nơi mà bất cứ ai đăng bài này tôi đều xin lỗi và sẽ ghi công nếu tôi nhớ nơi tôi tìm thấy thứ này nhưng nó đã cứu mạng tôi:
Bạn không thể sử dụng KVC trên thuộc tính Int tùy chọn, vì KVC là Ca cao / Mục tiêu-C và Mục tiêu-C không thể thấy Int tùy chọn - nó không được kết nối với Objective-C. Objective-C chỉ có thể thấy các loại được bắc cầu đến Objective-C:
các loại lớp có nguồn gốc từ NSObject
các loại lớp được tiếp xúc với @objc
Cấu trúc Swift được bắc cầu