<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-9077495448448724410</id><updated>2009-12-18T04:42:49.252+09:00</updated><title type='text'>Cocoaの日々</title><subtitle type='html'>MacOSXプログラミング。毎日更新。
話題： Cocoa, Objective-C, Snow Leopard</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default?start-index=26&amp;max-results=25'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>704</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-7473375312282130400</id><published>2009-12-17T06:28:00.004+09:00</published><updated>2009-12-17T08:09:29.074+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FSEvent'/><title type='text'>FSEvent - フォルダを監視する</title><summary type='text'>（前回）Cocoaの日々: SimpleCap - アプリケーションボタン

前回 SimpleCap にアプリケーションパレットを追加した。これを使って他のアプリケーションで画像を編集することもできるのだが、編集後は最新の画像を SimpleCap側でも表示したい。その為には画像ファイルの更新状況を知る必要があるが今回は検証も兼ねて FSEvent を調べてみた。


FSEvent

FSEvent は指定したフォルダの変更を通知してくれるフレームワーク。Mac OS X v10.5 から導入された。

（参考）
Leopard解体新書--第5回：ファイル監視を行うFSEvent - Leopard解体新書 - page2 - ZDNet Japan

Mac Dev Center: File System Events Programming Guide: Using the </summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/7473375312282130400/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=7473375312282130400' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/7473375312282130400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/7473375312282130400'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/fsevent.html' title='FSEvent - フォルダを監視する'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-1380021804092540894</id><published>2009-12-16T05:48:00.001+09:00</published><updated>2009-12-16T12:31:14.934+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SimpleCap'/><title type='text'>SimpleCap - アプリケーションボタン</title><summary type='text'>Cocoaの日々: NSMatrix を使いカスタムボタンパレットを実装する

前回用意したカスタムボタンパレットを SimpleCapへ組み込んだ。

こんな感じ。

ボタンを押すとそのアプリケーションが表示中の画像を使って起動する。
これに伴って左下のアプリケーションメニューボタンは無くした。</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/1380021804092540894/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=1380021804092540894' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/1380021804092540894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/1380021804092540894'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/simplecap_16.html' title='SimpleCap - アプリケーションボタン'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ZoUhefzk0CI/SyalZ2SmNBI/AAAAAAAADwk/-5hm9pBp_G0/s72-c/091215-0001.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-5761235030574951917</id><published>2009-12-15T05:47:00.001+09:00</published><updated>2009-12-15T05:57:52.951+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NSCell'/><category scheme='http://www.blogger.com/atom/ns#' term='NSMatrix'/><title type='text'>NSMatrix を使いカスタムボタンパレットを実装する</title><summary type='text'>カスタムボタンパレット

NSMatrix を使ってカスタムボタンを並べたパレット（バー）を作った。SimpleCap で使うつもりなので、用途を特化して縦一列でアプリケーションのアイコンだけを表示する仕様にした。

できあがりはこんな感じ。

開発時に確認がしやすいようにアイコンのサイズは大きくしてある。

マウスをボタンの上に置くと背景を灰色にする。


ボタンを押すと画像を暗くする。





クラス構成

３つのクラスからなる。
ApplicationButtonPallette ... パレットを利用するためのメソッドを提供する。
ApplicationButtonMatrix   ... NSMatrix のサブクラス。マウスイベントやセルを管理する。
ApplicationButtonCell     ... NSCell のサブクラス。ボタンの描画を行う。
クライアントは</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/5761235030574951917/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=5761235030574951917' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/5761235030574951917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/5761235030574951917'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/nsmatrix.html' title='NSMatrix を使いカスタムボタンパレットを実装する'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ZoUhefzk0CI/SyQUch3c8EI/AAAAAAAADvk/b79gxgg9Mow/s72-c/091212-0001.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-8818850455676578384</id><published>2009-12-14T12:48:00.006+09:00</published><updated>2009-12-14T12:48:00.413+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NSTableView'/><title type='text'>NSTableView にカスタムセルを表示する (12) ボタンをつける〜NSTableViewのサブクラスでマウスイベント処理</title><summary type='text'>（前回）Cocoaの日々: NSTableView にカスタムセルを表示する (11) ボタンをつける〜NSCellのマウスイベントの扱い

NSTableView のサブクラスを作り、ここでマウスイベントを拾うことにした。


コード

移動中のマウスの動きもトラッキングしたい。Mac OS X v10.5 以降は NSTrackingArea が用意されているのでこれを使う。

（参考）Cocoaの日々: NSTrackingArea

CustomTableView.h
@interface CustomTableView : NSTableView {

 NSTrackingArea* trackingArea;

}
@property (retain) NSTrackingArea* trackingArea;

@end

トラッキング対象となるエリア（</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/8818850455676578384/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=8818850455676578384' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/8818850455676578384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/8818850455676578384'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/nstableview-12-nstableview.html' title='NSTableView にカスタムセルを表示する (12) ボタンをつける〜NSTableViewのサブクラスでマウスイベント処理'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZoUhefzk0CI/SyV0aOiAEuI/AAAAAAAADwE/V9YNohvwAS8/s72-c/091214-0001.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-144486289777054646</id><published>2009-12-13T06:51:00.002+09:00</published><updated>2009-12-13T07:04:04.834+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='情報'/><title type='text'>今週のCocoa情報(12/13) - 今週気になった Cocoaプログラミング情報の紹介</title><summary type='text'>Objective-C accessor declarations (readonly, readwrite, etc) - Stack Overflow

プロパティを外部には readonly として公開し、クラス内部では readwrite として使う方法が紹介されていた。
以下、コードを引用する。

in the book, "Cocoa Design Patterns," the author sometimes declares a property in the @interface as readonly:
// .h
@property (readonly, copy) NSArray *shapesInOrderBackToFront;
and then later adds an unnamed category to the implementation (.m)</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/144486289777054646/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=144486289777054646' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/144486289777054646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/144486289777054646'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/cocoa1213-cocoa.html' title='今週のCocoa情報(12/13) - 今週気になった Cocoaプログラミング情報の紹介'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-4195037780720879265</id><published>2009-12-12T08:01:00.000+09:00</published><updated>2009-12-12T08:01:02.483+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>tips: 開発中に実行時の言語を英語に切り替える</title><summary type='text'>以前コマンドラインで言語設定を行う方法を紹介した。

Cocoaの日々: 任意の言語でアプリを起動する

このオプションを Xcode に設定すると開発中に簡単に実行時の言語を切り替えられる。

方法は Xcode の左の実行可能ファイルで開発中のファイルを選び「情報を見る」を開く。




「起動時に引き渡される引数」へ設定を追加する。



後はチェックをつけて実行すえば英語になるし、外せば日本語になり、簡単に切り替えられる。
ローカライズするアプリケーションを開発している時には便利。</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/4195037780720879265/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=4195037780720879265' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/4195037780720879265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/4195037780720879265'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/tips.html' title='tips: 開発中に実行時の言語を英語に切り替える'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ZoUhefzk0CI/SxmVK4ifouI/AAAAAAAADtM/fw2p3WFq2XA/s72-c/091205-0026.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-5599507513905495756</id><published>2009-12-11T12:52:00.001+09:00</published><updated>2009-12-11T12:52:00.398+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NSCell'/><title type='text'>NSTableView にカスタムセルを表示する (11) ボタンをつける〜NSCellのマウスイベントの扱い</title><summary type='text'>※タイトルが実体とそぐわなくなったので変えました（「カスタムビュー」⇒「カスタムセル」）。

（前回）Cocoaの日々: NSTableView にカスタムビューを表示する (10) カスタムセル＋CoreData のメモリ利用状況

今度はカスタムセルの中にボタンを作ることにする。

アプローチ

画像や文字は表示するだけなので描画するだけなのだが、ボタンの場合はマウスイベントを処理する必要がある。カスタムセルの中の場合、単純に NSButton（や NSButtonCell）を貼付けるといった方法がとれない為、少しやっかいだ。試していないのであるいはそっちの方が楽かもしれないが、ボタンの挙動をカスタマイズしたいので自前で作ることにする。ボタンの挙動は Cocoaのそれではなく、Webアプリのボタンのそれに近いものにする。

次のような３つの状態を持たせる。

　(1)通常状態
　(2</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/5599507513905495756/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=5599507513905495756' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/5599507513905495756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/5599507513905495756'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/nstableview-11-nscell.html' title='NSTableView にカスタムセルを表示する (11) ボタンをつける〜NSCellのマウスイベントの扱い'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ZoUhefzk0CI/SyGDUaQEKCI/AAAAAAAADvc/nd5kpelfJKI/s72-c/091211-0001.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-2478716468994208890</id><published>2009-12-10T21:25:00.000+09:00</published><updated>2009-12-10T21:25:00.139+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQLite'/><category scheme='http://www.blogger.com/atom/ns#' term='coredata'/><title type='text'>CoreData - SQLite のオプション（pragma）</title><summary type='text'>CoreData で SQLite を使う場合でも SQLite のオプション（pragma）を設定することができる。今回はその覚え書き。

Persistent Store Features
SQLite Store ＞ Configuring a SQLite Store's Save Behavior
Mac Dev Center: Core Data Programming Guide: Persistent Store Features

サンプルコードを以下に引用する。
NSPersistentStoreCoordinator *psc = /* assume this exists */ ;

NSMutableDictionary *pragmaOptions = [NSMutableDictionary dictionary];
[pragmaOptions </summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/2478716468994208890/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=2478716468994208890' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/2478716468994208890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/2478716468994208890'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/coredata-sqlite-pragma.html' title='CoreData - SQLite のオプション（pragma）'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-6513941369092025850</id><published>2009-12-09T12:54:00.094+09:00</published><updated>2009-12-11T07:52:02.891+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coredata'/><title type='text'>NSTableView にカスタムビューを表示する (10) カスタムセル＋CoreData のメモリ利用状況</title><summary type='text'>（前回）Cocoaの日々: Cocoaの日々: NSTableView にカスタムビューを表示する (9) カスタムセルでCoreDataを扱う

前回作成した NSTableView + カスタムセル + CoreData のメモリ利用状況を調べてみた。
※以下、Mac OS X v10.5.8、XCode3.1、PowerBook G4 (PowerPC 1.5GHz/1GB）で調査

Instruments

以前作った NSArrayベース（オンメモリ）での1000件での状況と比較してみる。
（なお結果は使っている環境や状況によって変わる。１、２回しか試していないので厳密では無いことに注意）

NSArrayベースの実装

# Overall: 25,059
# Net: 10,085
Overall Bytes: 約30MB  (30,017,440)
Net Bytes: 約</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/6513941369092025850/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=6513941369092025850' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/6513941369092025850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/6513941369092025850'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/nstableview-10-coredata.html' title='NSTableView にカスタムビューを表示する (10) カスタムセル＋CoreData のメモリ利用状況'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ZoUhefzk0CI/Sx7gMjLa7lI/AAAAAAAADus/J2KLqvMdnvs/s72-c/091209-0001.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-8612657864267885865</id><published>2009-12-08T06:54:00.037+09:00</published><updated>2009-12-08T07:09:37.377+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NSImage'/><title type='text'>NSImage の isFlipped/setFlipped: が Deprecated</title><summary type='text'>NSImage を NSView へ描画するコードを書いていて isFlipped/setFlipped: が Mac OS X v10.6 から Deprecated になっているのに気がついた。

Mac Dev Center: Deprecated NSImage Methods

なんてこった。便利なのでよく使っていたのだが。。


flipped な NSView に NSImage を drawAtPoint:fromRect:operation:fraction: などでそのまま描くと画像は上下反転して描かれる。


今までは -[NSImage setFlipped:YES] を呼んでおくと座標系が合って正しく描画されていた。
setFlipped: が使えないとなるとどうすれば良いのか。


リファレンスを眺めていると NSAffineTransform を使って座標系</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/8612657864267885865/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=8612657864267885865' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/8612657864267885865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/8612657864267885865'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/nsimage-no.html' title='NSImage の isFlipped/setFlipped: が Deprecated'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ZoUhefzk0CI/Sx17juZRkTI/AAAAAAAADuk/KB1uIFmPiS0/s72-c/091208-0003.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-6520422260337141721</id><published>2009-12-07T21:39:00.000+09:00</published><updated>2009-12-07T21:39:00.582+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NSCell'/><category scheme='http://www.blogger.com/atom/ns#' term='coredata'/><title type='text'>Cocoaの日々: NSTableView にカスタムビューを表示する (9) カスタムセルでCoreDataを扱う</title><summary type='text'>（前回）Cocoaの日々: メモリ対決：NSTableView+カスタムセル vs NSCollectionView

前回の結果を受けてユーザインタフェイスには NSTableView+カスタムセルの組み合わせを使うことにする。今回は NSTableView+カスタムセルと CoreData の組み合わせについて検証する。


NSTableView+カスタムセルと CoreDataの組み合わせ

※ここでいうカスタムセルとは、１つのセルの中に複数の情報を表示する特別なセルを意味する。

通常のセルを使う場合 NSTableView と CoreData の相性は非常に良くて、連結はほとんど Bindings設定だけで済む。ただカスタムセルを使う場合は少し工夫が必要となる。前回までの検証では CoreData を使わないケースでカスタムセルとデータをバインドしていた。

Cocoaの</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/6520422260337141721/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=6520422260337141721' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/6520422260337141721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/6520422260337141721'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/cocoa-nstableview-9-coredata.html' title='Cocoaの日々: NSTableView にカスタムビューを表示する (9) カスタムセルでCoreDataを扱う'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZoUhefzk0CI/SxzPmK8RswI/AAAAAAAADtc/9hE6UG3SycM/s72-c/091207-0006.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-7672365441650838200</id><published>2009-12-06T07:24:00.049+09:00</published><updated>2009-12-07T12:00:25.911+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='情報'/><title type='text'>今週のCocoa情報(12/6) - 今週気になった Cocoaプログラミング情報の紹介</title><summary type='text'>Memory Management of Interface Builder Outlets - Stack Overflow

プロパティを IBOulet として使っている場合のメモリ管理についての話題。

ちょっと試してみた。非プロパティの object_normal、プロパティの object_assign、プロパティの object_retain の３種類の IBOutlet を用意する。


@interface MemoryStudyAppDelegate : NSObject  {
    NSWindow *window;
 
 IBOutlet NSObject* object_normal;
 NSObject* object_assign;
 NSObject* object_retain;
}

@property (assign) IBOutlet </summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/7672365441650838200/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=7672365441650838200' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/7672365441650838200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/7672365441650838200'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/cocoa126-cocoa.html' title='今週のCocoa情報(12/6) - 今週気になった Cocoaプログラミング情報の紹介'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ZoUhefzk0CI/SxrZ-Z0ZwzI/AAAAAAAADtU/ksr634cQUo8/s72-c/091206-0001.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-8938993344562968656</id><published>2009-12-05T08:00:00.000+09:00</published><updated>2009-12-05T08:00:41.781+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SimpleCap'/><title type='text'>SimpleCap - メニューキャプチャ改良 〜 メニューバー幅調整</title><summary type='text'>SimpleCap でメニューキャプチャをするとメニューバー（一番上のメニューの並び）の一番左側から含まれる。こんな感じ。





わざわざこういう仕様したのだが使っているとどうも見た目がよくない。そこで実際の幅に合わせるようにした。ただ従来の表現も捨てがたいし、互換性も持たせたいのでオプションで切り替えられるようにする。



「メニューバーを実際の幅に合わせる」にチェックをいれると先ほどのキャプチャ例はこうなる。





- - - -
バージョン 1.1.0 で公開予定です。
（リリースは年内を目標..）</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/8938993344562968656/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=8938993344562968656' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/8938993344562968656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/8938993344562968656'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/simplecap.html' title='SimpleCap - メニューキャプチャ改良 〜 メニューバー幅調整'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ZoUhefzk0CI/SxmTWan8VEI/AAAAAAAADss/pnXmiglMGNQ/s72-c/091205-0024.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-3301449684640115047</id><published>2009-12-04T21:04:00.001+09:00</published><updated>2009-12-07T12:02:57.521+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NSCollectionView'/><title type='text'>メモリ対決：NSTableView+カスタムセル vs NSCollectionView</title><summary type='text'>（前回）Cocoaの日々: Cocoaの日々: NSTableView にカスタムビューを表示する (8) NSCollectionView で選択状態を描画する

NSCollectionView が NSTableView の代替として、機能的には使えそうなことがわかってきた。メモリ消費の観点ではどうだろうか。前回のサンプルを使い両者におけるメモリ利用状況を Instruments を使って比較してみた。

※以下、Mac OS X 10.5.8 (PPC)、Xcode 3.1、PowerBook G4 (1.5GHz/1GB) で検証


サンプルアプリ


Instruments

Xcodeを含む開発キットにはメモリ利用状況を調べることができる Instruments というツールが標準でついている。



これを使うとメモリの利用状況をクラス（オブジェクト毎）にグラフィカルに</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/3301449684640115047/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=3301449684640115047' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/3301449684640115047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/3301449684640115047'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/nstableview-vs-nscollectionview.html' title='メモリ対決：NSTableView+カスタムセル vs NSCollectionView'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZoUhefzk0CI/SxhPTBLR-iI/AAAAAAAADrE/oXKBYmp3l9k/s72-c/091202-0002.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-4573462600648271062</id><published>2009-12-03T21:21:00.018+09:00</published><updated>2009-12-03T21:21:00.344+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NSCollectionView'/><title type='text'>Cocoaの日々: NSTableView にカスタムビューを表示する (8) NSCollectionView で選択状態を描画する</title><summary type='text'>（前回）Cocoaの日々: NSTableView にカスタムビューを表示する (7) NSCollectionView

前回に続き NSCollectionView が NSTableView の代わりに使えないかを検証する。


アイテムの選択

NSCollectionView には Selectable というプロパティがあるが、これにチェックを入れても実際の動作では選択できない（アイテムを押しても何も起こらない）。


NSTableView のように選択をしたい。調べてみると他の人がこの問題に取り組んでいた。

NSCollectionViewを選択可能にする - The Invisible Designer
CocoaDev: NSCollectionView

これらを参考に選択できるようにしてみよう。


コーディング
※以下、MacOSX10.5(ppc)/</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/4573462600648271062/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=4573462600648271062' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/4573462600648271062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/4573462600648271062'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/cocoa-nstableview-8-nscollectionview.html' title='Cocoaの日々: NSTableView にカスタムビューを表示する (8) NSCollectionView で選択状態を描画する'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZoUhefzk0CI/Sxb091H06yI/AAAAAAAADpk/MKn7xLbtUsI/s72-c/091203-0002.gif' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-5414780295531722122</id><published>2009-12-02T12:34:00.034+09:00</published><updated>2009-12-02T15:15:17.093+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NSCell'/><category scheme='http://www.blogger.com/atom/ns#' term='NSCollectionView'/><title type='text'>NSTableView にカスタムビューを表示する (7) NSCollectionView</title><summary type='text'>（前回）Cocoaの日々: NSTableView にカスタムビューを表示する (6)カスタムセルにモデルオブジェクトの内容を描画する

前回カスタムセルで画像と文字列を描画したがこれを Interface Builder でデザインしたい。


カスタムセル VS カスタムビュー

同じ事を考える人がいて Stack Overflow に質問が出ていた。が、やはり難しそうだ。
Is it possible to design NSCell subclasses in Interface Builder? - Stack Overflow


となると通常通りカスタムビューを作成してデザインするしかない。その場合、カスタムセルでそのカスタムビュー（Nibになる）を読み込んで描画することになる。ただ NSTableView の上のセルの上に NSView を載せることになり、複雑な上</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/5414780295531722122/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=5414780295531722122' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/5414780295531722122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/5414780295531722122'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/nstableview-7-nscollectionview.html' title='NSTableView にカスタムビューを表示する (7) NSCollectionView'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ZoUhefzk0CI/SxTnIevW6AI/AAAAAAAADoM/yoTdFTQnL24/s72-c/091201-0007.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-8824175894970010179</id><published>2009-12-01T06:31:00.000+09:00</published><updated>2009-12-01T06:31:00.241+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NSCell'/><title type='text'>NSTableView にカスタムビューを表示する (6)カスタムセルにモデルオブジェクトの内容を描画する</title><summary type='text'>（前回）Cocoaの日々: NSTableView にカスタムビューを表示する (5)カスタムセルへ bindings経由でモデルオブジェクトを渡す

前回カスタムセルにモデルオブジェクトを渡すことができたので、今回はそれを描画してみる。

コーディング

一旦値が取得できれば描画は簡単。描画時に -[NSCell drawWithFrame:inView] が呼び出されるので、ここでモデルオブジェクトの内容をビューへ描けば良い。バンドル内の画像とタイトルを表示させてみた。

CustomCell.m

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
 Homepage* homepage = [self objectValue];
 NSImage* image = [[[NSImage </summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/8824175894970010179/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=8824175894970010179' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/8824175894970010179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/8824175894970010179'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/12/nstableview-6.html' title='NSTableView にカスタムビューを表示する (6)カスタムセルにモデルオブジェクトの内容を描画する'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ZoUhefzk0CI/SxODx1QSibI/AAAAAAAADoE/rFS7FPoOGsU/s72-c/091130-0010.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-7713898223977437958</id><published>2009-11-30T12:59:00.003+09:00</published><updated>2009-11-30T13:05:01.226+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='binding'/><category scheme='http://www.blogger.com/atom/ns#' term='NSCell'/><title type='text'>NSTableView にカスタムビューを表示する (5)カスタムセルへ bindings経由でモデルオブジェクトを渡す</title><summary type='text'>（前回）Cocoaの日々: NSTableView にカスタムビューを表示する (4) カスタムセル続き

NSCell は通常一つのプロパティにバインドするようにできている。カスタムセルでは複数のプロパティを扱いたい。Bindings経由で複数プロパティを渡すには、そのプロパティを持つモデルオブジェクトそのものが渡せれば良い。

（例）Book.title ではなく Book 自体を渡す。そうすれば Book.author にもアクセスできる。

今回はこの課題を扱う。


サンプル作成

前回までのコードに手をいれていく。最初に Interface Builder を立ち上げて Bindings 設定を変更する。


カスタムセルを貼付けている NSTableView の NSTableColumn の Bindings パネルを開き、Model Key Pathを変更する。

前回</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/7713898223977437958/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=7713898223977437958' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/7713898223977437958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/7713898223977437958'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/11/nstableview-5.html' title='NSTableView にカスタムビューを表示する (5)カスタムセルへ bindings経由でモデルオブジェクトを渡す'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZoUhefzk0CI/SxMFl0nHjgI/AAAAAAAADnc/ThME-WEpqEk/s72-c/091130-0001.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-8754024432120775391</id><published>2009-11-29T07:23:00.034+09:00</published><updated>2009-11-30T08:09:17.285+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='情報'/><title type='text'>今週のCocoa情報(11/29) - 今週気になった Cocoaプログラミング情報の紹介</title><summary type='text'>Are instance variables set to nil by default in Objective-C? - Stack Overflow

インスタンス変数は初期化されるのか？の話題。
＝&gt; 初期化される（0 にセットされる）。
Mac Dev Center: The Objective-C Programming Language: Allocating and Initializing Objects


今週は Stack Overflow であまり気になった記事は無かったので代わりに Mac Dev Center で気になった情報を掲載しておく。



Mac Dev Center: Dock Tile Programming Guide: Creating a Dock Tile Plug-in

Mac OS X v10.6 から "Dock Tile </summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/8754024432120775391/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=8754024432120775391' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/8754024432120775391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/8754024432120775391'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/11/cocoa1129-cocoa.html' title='今週のCocoa情報(11/29) - 今週気になった Cocoaプログラミング情報の紹介'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-6390533029645342669</id><published>2009-11-28T06:07:00.005+09:00</published><updated>2009-11-28T06:07:00.468+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coredata'/><title type='text'>Core Data: モデルからクラスを自動生成する</title><summary type='text'>以前、Core Data のデータモデル（.xcdatamodel) からクラスが生成できないものかと書いたが方法が分かった。以下 Xcode 3.2 での例。
データモデル定義
こんなモデルを定義してみた。
NSManagedObject 自動生成
新規ファイル作成で Managed Object Class を選択する。


次へ進む。
ここで目的のエンティティを選択する。
できた。

中身はこんな感じ。
Book.h#import 


@interface Book :  NSManagedObject 
{
}

@property (nonatomic, retain) NSString * author;
@property (nonatomic, retain) NSString * title;

@end

Book.m#import "Book.h"


@</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/6390533029645342669/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=6390533029645342669' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/6390533029645342669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/6390533029645342669'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/11/core-data.html' title='Core Data: モデルからクラスを自動生成する'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ZoUhefzk0CI/Sw2dKLKhO2I/AAAAAAAADlk/DeKkx0hQVjk/s72-c/091126-0007.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-5826092235660672799</id><published>2009-11-27T12:59:00.004+09:00</published><updated>2009-11-27T13:21:54.500+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NSCell'/><title type='text'>NSTableView にカスタムビューを表示する (4) カスタムセル続き</title><summary type='text'>（前回）Cocoaの日々: Cocoaの日々: NSTableView にカスタムビューを表示する(3) カスタムセルの作成

setDataCell:
前回のコメントで -[NSTableColumn setDataCell:] を使わないのかと指摘を受けた。

Mac Dev Center: NSTableColumn Class Reference

どちらかといえばこちらが正攻法か。試してみよう。


@interface TableViewController : NSObject {
  :
 IBOutlet NSTableColumn* tableColumn;
}


NSTableColumn のアウトレットを用意しておき、InterfaceBuilder で接続しておく。


-(void)awakeFromNib
{
 CustomCell* cell = [[[</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/5826092235660672799/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=5826092235660672799' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/5826092235660672799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/5826092235660672799'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/11/nstableview-4.html' title='NSTableView にカスタムビューを表示する (4) カスタムセル続き'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ZoUhefzk0CI/Sw9P_QdTjSI/AAAAAAAADms/wSbMHqMw32I/s72-c/091127-0001.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-357720778478057493</id><published>2009-11-26T12:54:00.002+09:00</published><updated>2009-11-26T12:54:00.282+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NSCell'/><title type='text'>Cocoaの日々: NSTableView にカスタムビューを表示する(3) カスタムセルの作成</title><summary type='text'>（前回）Cocoaの日々: NSTableView にカスタムビューを表示する(2) ひな形作成〜Cocoa Bindings

今回は NSCell のサブクラスを作り、それを NSTableView へ表示してみよう。

ビュー

新規にウィンドウを用意しそこへ NSTableView を貼付ける。前回のものは比較の為に残しておく。


NSTableView の delegate として TableViewController を指定しておく。


カスタムセル

NSCell のサブクラスを用意する。

CustomCell.h

@interface CustomCell : NSCell {

}

@end


試しに drawWithFrame:inView: をオーバーライドして、緑色で塗りつぶすコードを書いてみた。

CustomCell.m

@</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/357720778478057493/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=357720778478057493' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/357720778478057493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/357720778478057493'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/11/cocoa-nstableview-3.html' title='Cocoaの日々: NSTableView にカスタムビューを表示する(3) カスタムセルの作成'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZoUhefzk0CI/Sw28MYQD2SI/AAAAAAAADmU/ENA2uq9DZA8/s72-c/091126-0001.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-8188903416907007396</id><published>2009-11-25T12:29:00.000+09:00</published><updated>2009-11-25T12:29:32.302+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='binding'/><title type='text'>NSTableView にカスタムビューを表示する(2) ひな形作成〜Cocoa Bindings</title><summary type='text'>（前回）Cocoaの日々: NSTableView にカスタムビューを表示する（調査中）

調査用にサンプルプログラムを作る。今回はテーブルビューにテストデータを表示するだけのプロジェクトを作成してみた。

クラス作成

Xcodeを立ち上げテンプレートから Cocoa Application を選んでプロジェクトを新規に作成する（Xcode3.1 / MacOSX10.5 で作成）。

まずコントローラーを作る。このクラスは表示用のデータ（配列）を保持している。初期化時にテストデータを生成して配列へ詰めておく。

TableViewController.h

@interface TableViewController : NSObject {

 NSMutableArray* list;
}
@property (assign) NSMutableArray* list;

@</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/8188903416907007396/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=8188903416907007396' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/8188903416907007396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/8188903416907007396'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/11/nstableview-2-cocoa-bindings.html' title='NSTableView にカスタムビューを表示する(2) ひな形作成〜Cocoa Bindings'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ZoUhefzk0CI/SwyinY3fwKI/AAAAAAAADk8/YFmSGNM0Vfc/s72-c/091125-0009.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-1974753000161097136</id><published>2009-11-24T19:11:00.000+09:00</published><updated>2009-11-24T19:11:15.599+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NSTableView'/><title type='text'>NSTableView にカスタムビューを表示する（調査中）</title><summary type='text'>NSTableView にカスタムビューを表示する方法を調査中。

NSTableView with custom cells - Stack Overflow

-tableView:dataCellForTableColumn:row: を使う方法が示唆されていた。

-tableView:dataCellForTableColumn:row: は NSTableViewDelegate プロトコルで定義されている。

Mac Dev Center: NSTableViewDelegate Protocol Reference

このプロトコルは Mac OS X 10.6 から新設されたもので、そのほとんどのメソッドは従来は Informal Protocol として用意されていたもの（なので 10.5 まででも基本的に使える）。

Mac Dev Center: </summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/1974753000161097136/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=1974753000161097136' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/1974753000161097136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/1974753000161097136'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/11/nstableview-ni.html' title='NSTableView にカスタムビューを表示する（調査中）'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9077495448448724410.post-4259580474110499139</id><published>2009-11-23T08:29:00.001+09:00</published><updated>2009-11-24T13:13:10.168+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>git - タグ付けの覚え書き</title><summary type='text'>git のタグ付けを試行錯誤。ようやく感じがつかめた。今後はサンプルを作ったらコミット＆タグ打ちして、そのタグのついた github の URL を掲載すれば良いことがわかった。


(1) ファイル TEST.1 を追加

$ touch TEST.1
$ git add TEST.1
$ git commit -m "add"
[master a890359] add
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 TEST.1
$ git push origin master
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 233 bytes, done.</summary><link rel='replies' type='application/atom+xml' href='http://xcatsan.blogspot.com/feeds/4259580474110499139/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=4259580474110499139' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/4259580474110499139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9077495448448724410/posts/default/4259580474110499139'/><link rel='alternate' type='text/html' href='http://xcatsan.blogspot.com/2009/11/git.html' title='git - タグ付けの覚え書き'/><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>xcatsan@mac.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04147175101149136459'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>