All Stories

~iOS13でURLSessionのcompletionHandlerが実行されない問題への対応

久しぶりに面白いバグに遭遇した. iOS14ではURLSession.dataTask(with:completionHandler:)のcompletionHandlerが実行されるが, それ以前のOSでは実行されないというものだ. それも全ての箇所ではなく, 1箇所だけ何故か常に実行されない.

SwiftとnilError

先日、AVAudioFile.read(into:frameCount:)の吐く例外がnilErrorという不可解なものになることがあることを知った. 最初は何故nilなのかと首を傾げたが、どうもnilErrorというエラーらしい. 不可解だったので調べてみることにした.

xib上でhiddenに設定したconstraintsのactivateが正しく機能しない問題への対応

iOSアプリ開発において, xib上でPortrait用・Landscape用のconstraintsをそれぞれ設定し, コードでactivate/deactivateを切り替えることが往々にしてあると思います. activate/deactivateの処理が正しく機能しなくなる現象に遭遇したので, その対応方法についてのメモです.

OTP23から入るpgのコードを読む

最近は久しぶりにプロダクションでErlangのコードを書いたりしています. かなり小規模な物ですが. そこでOTP23で新しく入るpgのコードを読む機会があったので, pgの実装についてまとめようと思います.

SwiftのProtocolに対してKVOを行う

前回から引き続きKVOについての投稿です. SwiftにおけるKVOは対象のpropertyの制限 (@objc dynamic) は広く知られていますが, Protocolに対してKVOを行うのもハードルが高かったりします. delegateを自分で実装した方が早い気もしますが, Property Binding的なことをしようとすると, KVOの方が直感的なコードを書けるので悩ましいところです. この記事では, Swift Protocolに対してKVOをする方法を紹介します.

KVOのクラッシュ地獄から脱却する

iOSにはKey-Value Observing (KVO)というpropertyの変更を監視する仕組みがあります. NSObjectが提供する機能である為, Swiftで使うにはいくつもの制限があり必ずしも使いやすいとは言えませんが, サードパーティライブラリを使うことなく利用できるのは大変便利です. そして, AVPlayerなどを扱う際には避けて通れない機能でもあります. しかし, KVOを利用すると解放済みオブジェクトに対して通知が行ってクラッシュすることがあり, 長らく悩まされてきました. 長年の悩みの原因の1つが解消されたので, それを紹介します.