私はSwift 1に戻ってきましたが、私はSwift 2.2に移行しようとしていました。それはすべて、(最終的に)オブザーバーと関係する気まぐれなクラッシュから離れて機能します。Swift 2.2でAVPlayerがクラッシュするのを避けてください。
func removeObservers()
{
print("REMOVING OBSERVERS")
if (!self.is_image && self.player != nil ) {
if (self.player?.observationInfo != nil) {
self.player?.removeObserver(self, forKeyPath: "currentItem.status")
self.player?.removeObserver(self, forKeyPath: "readyForDisplay")
}
}
NSNotificationCenter.defaultCenter().removeObserver(self)
}
これはオブザーバをSwiftTryCatchを使用しますがある場所がクラッシュの行で「『readyForDisplayキーのパスのためのオブザーバーを削除することはできません『』それはオブザーバーとして登録されていないために。』」ORことで以前働いていました私がコメントアウトすると、割り当て解除されたオブジェクトに登録されます。
do {} catch {}を追加すると、「これはスローされません」というエラーが表示され、同じものがクラッシュします。これをtry-catch形式の形式にするにはどうすればよいですか?
の財産です。コードの他の部分でそのオブザーバーを削除しますか?最も簡単な方法は、オブザーバーを作成したり削除したりする場所を統一することです。私はreadyForDisplayを表示後に削除していましたが、deallocが来たときに削除できませんでした。 – Putz1103