2016年10月26日水曜日

特別編:消えたユーザ辞書を復活

プログラミングと関係ないけど、Mac、iOS関係なのでこちらに書いておく。

macOS Sierraにしたら、ことえり(今もことえりって呼んでいいの?)のユーザ辞書が消えやがりましたよ。
以前のOSでもこういう不具合に悩まされてた人がいたみたいだけど、自分はこれが初めて。
iCloudドライブ経由で同期されるため、iPadに残ってればそこからMacにも反映させられるって情報もあったんだけど、その通りやってもiPadの方のが逆に消えてしまってお手上げだった。

今回、運よくTime Machineでバックアップが取ってあったので、それを使って復活させたわけ。

場所はユーザ/ユーザ名/ライブラリ/Dictionaries。
そこにあるユーザ辞書とUserDictionaryDescription.plistの二つをTime Machineで復活させる。

そしてシステム環境設定のキーボード/入力ソース/日本語の一番下にある追加辞書:に上記のユーザ辞書をドロップすればいい。
念のためにMacを再起動したけどね。
とりあえずうまくいってくれて助かった。

つーかさ、Sierra 10.12.0にアップデートして消えて、ちょこちょこ自分で辞書登録始めてたんだけど、10.12.1に上げたらまた消えたんだよね。
ユーザ辞書のトラブルはずいぶん昔からあるんだから、Appleもなんとかせいや。

ユーザ辞書の書き出し

ユーザ辞書を書き出す場合も、上記を任意のフォルダにドラッグ&ドロップすればいい。その際、なぜか辞書はコピーされずに移動になってしまうので注意。
編集した後にまた戻してやらないとユーザ辞書が消えてしまうことになる。

書き出されたユーザ辞書はテキストファイルになるので、それを開いて編集し、また戻してやればいい。

iCloudとの同期

上でも説明したライブラリのDictionariesフォルダ。
これのCoreDataUbiquitySupportフォルダを消して、iCloudを有効にしたままMacを再起動すると、iCloudからユーザ辞書がダウンロードされて復活するようだ。
一応うまくいったが、iPadの方で登録したのとまた違うようだ。
正直わからん。

2016年10月20日木曜日

コードで作ったオブジェクトが動かない時はARCを疑え

Storyboardで配置したUI部品(ボタンとかラベルとか)じゃなく、コードの中で作った部品が機能せず、「なんでじゃー!」と発狂したことなら皆さん何回かあると思います。

これって、本来はプロパティ(インスタンス変数)に保存しておかなけりゃいけないものを、関数の中だけのローカル変数に保存したばっかりに、関数を抜けた途端にARCが働いてガベージコレクションされちゃうからなのよね。
(実際にガベージコレクションするタイミングはARC任せだけど)

エラーやウォーニングが出るわけじゃないし、部品自体は画面に表示されたままだから、なんでじゃー! ってなるんだけど、iOSの仕組みを考えるとなるほどということになる。

UI部品ばかりじゃなく、音を鳴らすとかの場合にも、関数の中でサウンド関係のインスタンスを作って鳴らしたはずが鳴らなかったりするのは、やはり鳴り終えるまでガベージコレクションされない変数(要するにプロパティ)として保持しておかなきゃいけないのよね。

Storyboardで作ると自動的にプロパティが作られるので実感わかないけど、要はそういうこと。