는 :자 NSPredicate NSUnknownKeyException은 - 스위프트 아래에 나열된 내 현재 코드가 4.0
개체 유형 '
위의 코드가 발생[<ViewController.User 0x6000000afa20> valueForUndefinedKey:]
':class ViewController:UIViewController{ ovveride func viewDidLoad(){ filterData() } func filterData(){ var usersArray = [User(name:"John",userId:1),User(name:"Ed",userId:2),User(name:"Ron",userId:3)] let filteredData = (userArray as NSArray).filtered(using:NSPredicate(format: "userId=1")) } }
는 다음의 예외 (
NSUnknownKeyException
)를 던졌습니다 이 클래스는 키userId
에 대해 키 코드를 준수하지 않습니다.
filter(using:)
에 대한 Apple의 문서에는이 문제를 일으킬 수있는 변경이 명시되어 있지 않습니다.
스위프트 4.0에서 NSPredicate
을 어떻게 사용할 수 있습니까?
요청에 따라 @objc
을 사용해 보았습니다. 그러나 여전히 같은 오류입니다. 또한 댓글로
@objc
class User:NSObject{
var name:String!
var userId:Int!
init(name:String,userId:Int){
self.name = name
self.userId = userId
}
}
내가 아래 메시지가 나타납니다 userId
에 @objc 속성을 추가에,이 질문에 대한 받았다. 그 유형이 자 NSPredicate 오브젝티브 C에
@objc
class User:NSObject{
@objc var name:String!
var userId:Int! //@objc here results in error
init(name:String,userId:Int){
self.name = name
self.userId = userId
}
}
문자열 속성을 표현 완전히 잘 작동 할 수 없기 때문에 속성은 @objc 표시 할 수 없습니다. - @objc를 클래스 에 추가 - 또한 속성에 @objc를 추가하십시오.
https://stackoverflow.com/questions/44390378/how-can-i-deal-with-objc-inference-deprecation-with-selector-in-swift-4의 가능한 중복 - 추가했다 '@ objc'를 사용하여'userId' 속성을 Objective-C에 노출 시키시겠습니까? –
관련이 없지만 속성을 명시 적으로 비 선택적 값으로 초기화하더라도 암시 적으로 래핑 된 옵션으로 속성을 선언하는 이유는 무엇입니까? 그러지 마. 느낌표를 제거하십시오. 예, 컴파일러 오류가 발생하지 않습니다. 클래스 앞의'@ objc'는 멤버에 영향을주지 않습니다. 필요한 각 멤버 앞에'@ objcMembers'를 사용하거나'@ objc'를 추가하십시오. 그럼에도 불구하고 NSPredicate를 사용할 이유가 없습니다. – vadian
'@ ojbc'를'userID' 속성 자체에 추가하려고 했습니까? Swift 4.0은 이전 버전보다'@objc' 동작에 대해 좀 더 까다 롭습니다. –