Swiftの配列をフィルタリングするのにNSPredicateを使用しています。問題は、iOS 11(Xcode 9/w Swift 4)にアップデートした後です。私はフィルタラインでクラッシュし続けます。ここでクラッシュログは次のとおりです。キャッチされない例外により「NSUnknownKeyException」にアプリを終了iOS 11 Swift配列のクラッシュでのNSPredicate検索 - NSUnknownKeyException
、理由:>「[valueForUndefinedKey:]:このクラスは、キー>値コーディング準拠のキー名のためではありません」ここで
私が配列したクラスの例である:ここで
final class Model: NSObject {
let name: String
init(name: String) {
self.name = name
}
}
がクラッシュしたコードです。
let myArray = [Model(name: "Jason"), Model(name: "Brian")]
let predicate = NSPredicate(format: "name == 'Jason'")
let filteredArray = myArray.filter { predicate.evaluate(with: $0)}
質問は、なぜこれがあることになりましクラッシュされています私はiOS 11にアップデートしましたか?
ありがとうございます。誰かが述語に使用されるより多くのプロパティを持つモデルを持っていて、この問題を(私のように)得る。プロパティ宣言の前に@objcを追加することができます。たとえば '@objc var name:String'のように、長いスイッチケースを避けることができます。 – Uros19
ニース、私はこれを私の答えに加えます!ありがとう。 このようにして問題を解決するには、プロパティに@ objcというアノテーションが直接付いている理由を少しはっきりさせる必要があります。 –