原因はイージーミス。リセット時にホットキーを管理している NSMutableSet に対して removeAllObjects を投げているつもりが、release が投げられていた。
HotkeyRegister.m
- (void)unregistAll
{
for (Hotkey* hotkey in _hotkey_set) {
[self unregistHotkey:hotkey];
}
// [_hotkey_set release];
[_hotkey_set removeAllObjects];
}
これでは吹っ飛ぶわけだ。リセットを1回でも実行すればオブジェクトがリリースされて2回目以降のリセットでクラッシュする。
合わせてサンプルの修正版も上げておく。
サンプル:Hotkey-8.zip
なぜ書き間違えたか覚えていないが Xcodeの補完機能で出てきたメソッドを確認なしで確定してしまったのかもしれない。