Obj.C

obj.C:停滞+バイナリ読/書追加

少しループしていましたが、いくつか今まで気がついていなかったこともわかってきて、基礎の基礎がひとつふたつと勉強できました。

自分で勝手に解釈して作っているサンプルコードにバイナリの読み書きを追加しました。どういうふうにすればいいのか、全く考えが及ばなかったので時間がかかってしまいました。一旦、すべてバイナリの読み書きに変えてしまったのですが、期待した結果にならなかったので混在をさせるコードを書いているうちにぐちゃぐちゃになってしまいました。

他方、viva Cocoa Objective-C入門は最後まで軽く見終わりました。勉強の題材としてとても助かりました。少し残念だったことは、最新のXcodeによる説明になっていなかったことです。欲を言うなら、説明がもう少し平易・簡便な短文であればもっとわかりやすかったと思います。

対処と成果:

  • 、すでにファイルタイプを変更したとき、case文でfile pathを作るようにしていました。同じやり方をread/writeとURL読み込みにも適用し、それぞれのファイルタイプに応じたread/writeとURL読み込みができるようにしました。
  • たとえば、.dataはhttp://vivacocoa.jp/MyClipURL.dataをNSKeyedUnarchiver unarchiveObjectWithDataで読み込みます。書き込みもarchiveRootObjectを使います。
    他方、.rtfdはhttp://japan.cnet.com/news/を読み込み、writeToFileで書き込みます。
    ついでながら、.rtfはhttp://japan.cnet.com/news/を読み込み、archiveRootObjectで書き込みます。
    やりたかったことは、それぞれの方式を簡単に入れ替えることで違いがわかるようにしたかっただけです。深い意味はありません。
  • 問題は、setStringでviva Cocoa Objective-C入門に習ってNSTextStorageにoverrideするように書き換えましたのでNSStringと型が合わなくなる問題があちこちで出ました。これは次のようにすれば回避できることがわかりました。
    NSStrageのエリア = NSStringのエリア;//エラー
    NSStrageのエリア = [NSStringのエリア copy];//OK
    [text Viewのエリア string]
    [text Viewのエリア textStorage]
  • 今まで、setDocumentEditedのYES/NOにする意味がわかっていませんでしたが、すべてNO(編集済み)にすると、textDidChangeにイベントが渡らなくなるということがわかりました。
    また、ファイルの読み込みとURLの読み込みの後、text Viewを書き換えているのですが、
    この書き換え後にtextDidChangeが繰り返し呼ばれることがわかりました。文字入力のときは1文字単位でしたが、ファイル読み込みの場合、どういう単位なのか、まだ確認がとれていません。
  • overrideさせなくてもいいメソッドをoverrideさせたことで何が起きているのかわからなくなりました。まだ、overrideの意味が100%わかっていないから、こんな問題を起こしてしまうのでしょう。

問題点:

  • UI(window)のコントロールはtext View、read/writeはModelクラスのメモリを使っていますが、この制御(使い分け)がちゃんとできていないようなので、調査して修正する必要があります。
  • encodeWithCoderinitWithCoderをModelに追加したのですが、機能していません。使い方がわかっていません。
  • せっかくログを取って調べても、疑問点と結果を整理しておかないと、何がわからないと思ったのかがあとからではわからなくなってしまいます。健忘症の問題です。

Categories: Obj.C, 技術