2016-05-28 4 views
2

私は、次のようにキーの値を設定するコードがあります。swift 2.2でNSUnknownKeyExceptionを捕捉する方法は?

item.setValue(field.1, forKey: field.0) 

を、私はNSUnknownKeyExceptionがスローされた場合にキャッチしたいが、私は次のコードを持っており、それが動作していない:

​​

表示されるエラー、それが有効でないキーは以下の通りです:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: setValue:forUndefinedKey: 

どのように私はこの例外をキャッチすることができますか?

ご協力いただければ幸いです。

+1

それが捕捉可能なエラーではありません。それは例外です!ここでの議論を比較するhttp://stackoverflow.com/questions/35973899/how-does-one-trap-arithmetic-overflow-errors-in-swift – matt

+0

@matt他の言語と同様に、例外はキャッチ可能ではありませんか? – Miguelme

+0

Objective-C例外はプログラミングエラーを示します。あなたはプログラミングエラーを捕まえません。あなたはそれらを修正する。 – gnasher729

答えて

2

スイフトではできません。

はエラーと例外を混同しないでください:

  • スウィフトでエラーのアイデアは早期に現在のスコープの外に出ることです。

  • ココアの例外のアイデアは、あなたが水中で死んでいることです。あなたはこれが起こることを決して許さなかったはずです。

ここで、Cocoaは例外をスローしてキャッチすることがあります。しかし、そのような振る舞いは、今日は正式に落胆しており、あなたがスウィフトでできることではありません。このクラスを送信しているクラスがあなたのものであれば、setValue:forUndefinedKey:を実装してください。ただし、未知のNSExceptionが発生した場合、これがゲームの終了です。

+0

Objective-Cの使い方が気に入らず、Objective-Cを使用したくない場合は、Appleに強化要求を提出することをお勧めします。正直なところ、Objective-C例外をキャッチするかどうかはわかりません彼らがそれを許すことを望んでいたとしても、スウィフトでは可能であろう。 – matt

+0

Exception =水中で死んだ。それを覚えておいてください:-) – gnasher729

0

Objective-Cの@try/@catchをスウィフトラッパー(https://github.com/williamFalcon/SwiftTryCatchなど)で捕捉できます。状況に

使い方は次のようになります。

SwiftTryCatch.try({ 
    item.setValue(field.1, forKey: field.0) 

}, catch: { (exception) in 
    print("Trying to set wrong value for the item ") 

}, finally: { 

}) 
関連する問題