<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0YESXo6eSp7ImA9WhRUGEk.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410</id><updated>2012-01-29T21:45:08.411+09:00</updated><category term="flash" /><category term="Core Annimation" /><category term="NSFontPanel" /><category term="SimpleViewer" /><category term="thinbutton" /><category term="動画" /><category term="RubberBand" /><category term="NSFileManager" /><category term="SQLite" /><category term="WebKit" /><category term="カテゴリ" /><category term="Sparkle" /><category term="本" /><category term="cocoa" /><category term="objective-c" /><category term="git" /><category term="tips" /><category term="NView" /><category term="GIMP" /><category term="Keychain Service" /><category term="Safari" /><category term="NSFontManager" /><category term="NSInvocation" /><category term="NSValueTransformer" /><category term="NSView" /><category term="吹き出し" /><category term="ImageKit" /><category term="undo" /><category term="WebKit Plug-in" /><category term="WPSU" /><category term="NSWorkspace" /><category term="PDF" /><category term="ScriptingBridge" /><category term="ローカライズ" /><category term="ホットキー" /><category term="XML" /><category term="NSBezierPath" /><category term="Dashboard" /><category term="NSTableView" /><category term="carbon" /><category term="xcode" /><category term="プリファレンス" /><category term="メニュー" /><category term="ソフト公開" /><category term="HUD" /><category term="Plug-in" /><category term="TBXML" /><category term="タイマーダイアログ" /><category term="ローカリゼーション" /><category term="NSOpenPanel" /><category term="画面キャプチャ" /><category term="zlib" /><category term="RTFD" /><category term="google" /><category term="Core Image" /><category term="blocks" /><category term="スクラップブック" /><category term="情報" /><category term="FSEvent" /><category term="Pixelmator" /><category term="Quick Look APIs" /><category term="調査・検証" /><category term="コンテキストメニュー" /><category term="カスタムウィンドウ" /><category term="プロパティ" /><category term="NSApplication" /><category term="ADCサンプル" /><category term="NSPasteboard" /><category term="SimpleCap" /><category term="ASIHTTPRequest" /><category term="objective-c 2.0" /><category term="NSScreen" /><category term="TwitPic" /><category term="今週のcocoa情報" /><category term="Nib" /><category term="NSEvent" /><category term="ドラッグ＆ドロップ" /><category term="NSViewController" /><category term="SIMBL" /><category term="起動アプリ" /><category term="ツールバー" /><category term="CopyAndPaste" /><category term="KVC" /><category term="debug" /><category term="NSImage" /><category term="マルチスクリーン" /><category term="NSTextField" /><category term="NSMenuItem" /><category term="Cookie" /><category term="アニメーション" /><category term="Launch Services" /><category term="Localization" /><category term="リリース" /><category term="BlogAssistant" /><category term="NSViewAnimation" /><category term="NSMatrix" /><category term="Snow Leopard" /><category term="coredata" /><category term="Application List" /><category term="NSWindow" /><category term="category" /><category term="タブ" /><category term="NSCell" /><category term="NSCollectionView" /><category term="binding" /><title>(旧) 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="alternate" type="text/html" href="http://xcatsan.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>883</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/lQGG" /><feedburner:info uri="blogspot/lqgg" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;D0EASHs6eyp7ImA9WxFVFE4.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-1294091733291628261</id><published>2010-06-13T22:27:00.002+09:00</published><updated>2010-06-13T22:27:29.513+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-13T22:27:29.513+09:00</app:edited><title>サイトをリニューアルしました</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/1294091733291628261/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=1294091733291628261" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/1294091733291628261?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/1294091733291628261?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/W2_sihXLgaI/blog-post_13.html" title="サイトをリニューアルしました" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><thr:total>0</thr:total><content type="html">新しいサイトはこちらです↓

Cocoaの日々

※このサイトは閉鎖せずに今後も公開しておきます。

長い間ありがとうございました。
よければ新しいサイトの方も訪問してみて下さい。

橋口
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PicGFDK1mRMk67t0qmCUsEF0UCw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PicGFDK1mRMk67t0qmCUsEF0UCw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PicGFDK1mRMk67t0qmCUsEF0UCw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PicGFDK1mRMk67t0qmCUsEF0UCw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/W2_sihXLgaI" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/06/blog-post_13.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4HRng7fSp7ImA9WxFVE08.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-5100760638055659098</id><published>2010-06-12T14:34:00.001+09:00</published><updated>2010-06-12T14:35:37.605+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-12T14:35:37.605+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - トランザクション(5) まとめ</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/5100760638055659098/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=5100760638055659098" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/5100760638055659098?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/5100760638055659098?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/Xz0t1RBqYLw/coredata-5.html" title="CoreData - トランザクション(5) まとめ" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><thr:total>0</thr:total><content type="html">前回までの検証結果まとめ。

NSManagedObjectContext操作まとめ

 操作説明ディスク操作Undo/Redoの履歴 
 save現時点でのメモリの内容を保存する書き出しなし 
 rollbackディスク上の内容に戻す（必要なら）読み込みクリア 
 undo１つ前の操作を取り消す（操作直前の内容に戻す）なしなし 
 redo次の操作をもう一回行う（取り消した操作を復活）なしなし 
 resetメモリの初期化（変更の破棄、読み込まれたオブジェクトの破棄）なしクリア 

(参考)NSManagedObjectContext Class Reference - Undo Management

今まで検証に使ったソースは GitHub からダウンロードできる。
CoreDataTransaction at 2010-06-12 from xcatsan's 
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ro1oqQabgoSVrGi6DE6knJjyd1E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ro1oqQabgoSVrGi6DE6knJjyd1E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ro1oqQabgoSVrGi6DE6knJjyd1E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ro1oqQabgoSVrGi6DE6knJjyd1E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/Xz0t1RBqYLw" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/06/coredata-5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ANRXk7cCp7ImA9WxFVE0w.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-1982480971452723430</id><published>2010-06-11T23:10:00.031+09:00</published><updated>2010-06-12T14:16:34.708+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-12T14:16:34.708+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - トランザクション(4) reset</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/1982480971452723430/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=1982480971452723430" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/1982480971452723430?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/1982480971452723430?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/3QrAclQ87L8/coredata-4-reset.html" title="CoreData - トランザクション(4) reset" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_ZoUhefzk0CI/TBMW29yzgRI/AAAAAAAAE5k/k02Qlb5ziFQ/s72-c/100612-0020.jpg" height="72" width="72" /><thr:total>0</thr:total><content type="html">-[NSManagedObjectContext reset] を試す。

コードを追加し、

- (IBAction)resetAction:sender{ [self.managedObjectContext reset];}
ボタンに紐づける。
実行。resetボタンを押すと、
データが消える。
これは NSManagedObjectContext（メモリ）上のデータが消えただけで、ディスク上のデータは残っている。

試しに reload ボタンを追加する。
ボタンが押されたら、NSArrayController を使っているので prepareContent を投げてみる。

- (IBAction)reloadAction:sender{ [arrayController prepareContent];}

すると reset で一旦消えた後、
reloadボタンで復活。


&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LiYuEfP5xjn8WEMn02C8tFjT17g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LiYuEfP5xjn8WEMn02C8tFjT17g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LiYuEfP5xjn8WEMn02C8tFjT17g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LiYuEfP5xjn8WEMn02C8tFjT17g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/3QrAclQ87L8" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/06/coredata-4-reset.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQGRHcyfCp7ImA9WxFVE0w.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-6601945477371872404</id><published>2010-06-10T23:10:00.028+09:00</published><updated>2010-06-12T13:52:05.994+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-12T13:52:05.994+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - トランザクション(3) undo と redo</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/6601945477371872404/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=6601945477371872404" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/6601945477371872404?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/6601945477371872404?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/tuUYMt95qNw/coredata-3-undo-redo.html" title="CoreData - トランザクション(3) undo と redo" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_ZoUhefzk0CI/TBMRNRZ9Z2I/AAAAAAAAE5U/MZEUKLAjHoU/s72-c/100612-0017.jpg" height="72" width="72" /><thr:total>0</thr:total><content type="html">undo と redo をやってみる。

まずアクションメソッドを用意する。

- (IBAction)undoAction:sender{ [self.managedObjectContext undo];}- (IBAction)redoAction:sender{ [self.managedObjectContext redo];}

Interface Builder を開き、Undo/Redoのボタンを追加する。これを先程のメソッドに紐づける。
実行する。確かに Undo/Redo が効いている。なお標準でメニューのUndo/Redoが FirstResponderにひもづけられており、実は今回のボタンを用意しなくてもメニューから Undo/Redoが行えた。

save と rollback の関係だが次のようになっていた。
(1) save後、Undo/Redo操作 は行
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/d7pJrRkS1eKCo0HM-pJFvC1VkOw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/d7pJrRkS1eKCo0HM-pJFvC1VkOw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/d7pJrRkS1eKCo0HM-pJFvC1VkOw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/d7pJrRkS1eKCo0HM-pJFvC1VkOw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/tuUYMt95qNw" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/06/coredata-3-undo-redo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8ERXg6fSp7ImA9WxFVEkQ.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-3042904027899992572</id><published>2010-06-09T23:01:00.001+09:00</published><updated>2010-06-12T08:10:04.615+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-12T08:10:04.615+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - トランザクション(2) rollback</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/3042904027899992572/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=3042904027899992572" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/3042904027899992572?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/3042904027899992572?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/bH9vWnaGKl0/coredata-2-rollback.html" title="CoreData - トランザクション(2) rollback" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_ZoUhefzk0CI/TBLAcNwTSDI/AAAAAAAAE4k/P8Dsa0DQu-c/s72-c/100612-0010.jpg" height="72" width="72" /><thr:total>0</thr:total><content type="html">rollback を試してみよう。前回のサンプルに Rollback ボタンを追加する。
rollback用のアクションコードを書き、そこへ紐づける。

- (IBAction)rollbackAction:(id)sender{ [self.managedObjectContext rollback];}

実行してみよう。
新規にレコードを追加し、入力したところで Rollback ボタンを押す。
すると新規レコードが取り消されるのがわかる。


複数の操作も試してみよう。
まず新規レコードを追加し
元からあったレコードを修正し
１レコード削除する
そして Rollback
元に戻った。
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Y6ydkaOtZWVCizpEXCl-ZB3Czu0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Y6ydkaOtZWVCizpEXCl-ZB3Czu0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Y6ydkaOtZWVCizpEXCl-ZB3Czu0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Y6ydkaOtZWVCizpEXCl-ZB3Czu0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/bH9vWnaGKl0" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/06/coredata-2-rollback.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUBQnw-fCp7ImA9WxFVEkQ.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-7665934989494723213</id><published>2010-06-08T07:28:00.107+09:00</published><updated>2010-06-12T08:00:53.254+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-12T08:00:53.254+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - トランザクション(1) 準備</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/7665934989494723213/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=7665934989494723213" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/7665934989494723213?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/7665934989494723213?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/aBg5SZorYkE/coredata-1.html" title="CoreData - トランザクション(1) 準備" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_ZoUhefzk0CI/TBK6penqP2I/AAAAAAAAE3c/C1T7qQWaYSI/s72-c/100612-0001.jpg" height="72" width="72" /><thr:total>0</thr:total><content type="html">CoreData のトランザクションについて調べてみる。

NSManagedObjectContext では Undo Management としていくつかメソッドが用意されている。
NSManagedObjectContext Class Reference - Undo Management

これらの挙動を試す簡単なサンプルプログラムを組んでみよう。
今回はまずレコードの表示、追加、削除、変更ができるプログラムを組む。


まず　Xcodeで新規プロジェクトを作る。このとき "Use Core Data for storage" にチェックを入れておく。
続いてモデルを定義する。今回は Book というシンプルなエンティティを一つ用意した。

ビューを用意する。NSTableView を作り author と titile 列を作る。
モデルとビューの紐付けに 
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/o87TDqSV3tAAKzbJE4dgSG375NE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o87TDqSV3tAAKzbJE4dgSG375NE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/o87TDqSV3tAAKzbJE4dgSG375NE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o87TDqSV3tAAKzbJE4dgSG375NE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/aBg5SZorYkE" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/06/coredata-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UGR3Y_fip7ImA9WxFVEk4.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-3692328143645189395</id><published>2010-06-07T23:50:00.000+09:00</published><updated>2010-06-11T15:53:46.846+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-11T15:53:46.846+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="カテゴリ" /><title>カテゴリでクラスメソッド定義</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/3692328143645189395/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=3692328143645189395" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/3692328143645189395?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/3692328143645189395?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/3MaNv1Rq4ic/blog-post.html" title="カテゴリでクラスメソッド定義" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><thr:total>0</thr:total><content type="html">カテゴリはクラスメソッドもいける。

こうなら、

@interface Customer (Extension)+(void)hello;@end


+(void)hello{ NSLog(@"hello");}

普通に呼び出せる。


[Customer hello];


ファクトリメソッドなどの追加に使えそうだ。

- - -
近日ブログのリニューアル予定（URLが変わります）。
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CQEzCrwi6vzHGKV5UeEFRCJbW74/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CQEzCrwi6vzHGKV5UeEFRCJbW74/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CQEzCrwi6vzHGKV5UeEFRCJbW74/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CQEzCrwi6vzHGKV5UeEFRCJbW74/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/3MaNv1Rq4ic" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/06/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8ERHc9eyp7ImA9WxFVEU4.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-82634317249345355</id><published>2010-06-06T23:46:00.000+09:00</published><updated>2010-06-10T12:00:05.963+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-10T12:00:05.963+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="情報" /><title>今週のCocoa情報(6/6) - 今週気になった Cocoaプログラミング情報の紹介</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/82634317249345355/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=82634317249345355" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/82634317249345355?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/82634317249345355?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/O65hNP53XhQ/cocoa66-cocoa.html" title="今週のCocoa情報(6/6) - 今週気になった Cocoaプログラミング情報の紹介" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><thr:total>0</thr:total><content type="html">what are alternatives to throwing exceptions in objective c - Stack Overflow
@throw よりも NSError を使う方が "the Apple recommended pattern" とのこと。確かに Cocoa Framework では例外より NSErrorを使う方が多い。


iPhone開発で便利なcocoa.vim - hellkite 日記と雑記とメモ。
MacVimとcocoa.vimで世界が変わった - Meltdown Countdown
VimでCocoa開発する話題。普段 PHPアプリなどは vimを使っているので気になる。


Cocoa nonatomic properties - Stack Overflow
プロパティ設定で "nonatomic"をつけない場合、ロック/
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FQhrKI3_mLwx0HmTs9UG6ICiA2Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FQhrKI3_mLwx0HmTs9UG6ICiA2Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FQhrKI3_mLwx0HmTs9UG6ICiA2Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FQhrKI3_mLwx0HmTs9UG6ICiA2Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/O65hNP53XhQ" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/06/cocoa66-cocoa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MEQXc_fSp7ImA9WxFWGU8.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-4324642871205226783</id><published>2010-06-05T23:18:00.016+09:00</published><updated>2010-06-07T23:36:40.945+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-07T23:36:40.945+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - Object ID（その５）情報</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/4324642871205226783/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=4324642871205226783" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/4324642871205226783?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/4324642871205226783?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/4gLyHnfWJuM/coredata-object-id_05.html" title="CoreData - Object ID（その５）情報" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><thr:total>0</thr:total><content type="html">（前回）Cocoaの日々: CoreData - Object ID（その４）Object ID から NSManagedObject を取得する #2

NSManagedObjectID についての情報など。


NSManagedObjectID into NSData - Stack Overflow

NSURL へ変換後、NSKeyedArchiver を使い NSData へ格納。



Cocoa with Love: Safely fetching an NSManagedObject by URI

NSManagedObjectIDに関して簡潔だがわかりやすい説明。URIから NSManagedObject を取得するカテゴリを紹介している。

@implementation NSManagedObjectContext (FetchedObjectFromURI)
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ji1h1Jm03Oxbo_HbEaWCgjh4-ZI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ji1h1Jm03Oxbo_HbEaWCgjh4-ZI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ji1h1Jm03Oxbo_HbEaWCgjh4-ZI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ji1h1Jm03Oxbo_HbEaWCgjh4-ZI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/4gLyHnfWJuM" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/06/coredata-object-id_05.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08GSX85eCp7ImA9WxFWFko.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-6035643767278988557</id><published>2010-06-04T23:36:00.009+09:00</published><updated>2010-06-05T03:23:48.120+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-05T03:23:48.120+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - Object ID（その４）Object ID から NSManagedObject を取得する #2</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/6035643767278988557/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=6035643767278988557" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/6035643767278988557?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/6035643767278988557?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/EMnJqzdf2jc/coredata-object-idobject-id_04.html" title="CoreData - Object ID（その４）Object ID から NSManagedObject を取得する #2" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><thr:total>0</thr:total><content type="html">（前回）Cocoaの日々: CoreData - Object ID（その３）Object ID から NSManagedObject を取得する


Object ID から NSManagedObject を取得するメソッドは、前回の -[objectWithID:] を含め３つある。

クラス：NSManagedObjectContext
- (NSManagedObject *)objectWithID:(NSManagedObjectID *
- (NSManagedObject *)objectRegisteredForID:(NSManagedObjectID *)objectID
- (NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID error:(NSError **)error

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5u-ocxXhOHS7m8ATxe5_M68tEFk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5u-ocxXhOHS7m8ATxe5_M68tEFk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5u-ocxXhOHS7m8ATxe5_M68tEFk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5u-ocxXhOHS7m8ATxe5_M68tEFk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/EMnJqzdf2jc" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/06/coredata-object-idobject-id_04.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQHQHYyeCp7ImA9WxFWFko.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-7110433488150116211</id><published>2010-06-03T23:14:00.019+09:00</published><updated>2010-06-05T02:25:31.890+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-05T02:25:31.890+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - Object ID（その３）Object ID から NSManagedObject を取得する</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/7110433488150116211/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=7110433488150116211" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/7110433488150116211?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/7110433488150116211?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/ViqE3C0zqHQ/coredata-object-idobject-id.html" title="CoreData - Object ID（その３）Object ID から NSManagedObject を取得する" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_ZoUhefzk0CI/TAk2lwRc_AI/AAAAAAAAE3E/GFUiOJ7Dj8Q/s72-c/100605-0008.jpg" height="72" width="72" /><thr:total>0</thr:total><content type="html">Object ID の URI から NSMangedObject を取得することができる。ステップは２つ。

(1) -[NSPersistentStoreCoordinator managedObjectIDForURIRepresentation:] を使い、NSManagedObjectID を取得する
(2) -[NSManagedObjectContext objectWithID:] に(1)の結果を渡し、NSManagedObject を取得する。

NSPersistentStoreCoordinator Class Reference - managedObjectIDForURIRepresentation:

NSManagedObjectContext Class Reference - objectWithID:

やてみよう。

サンプル：
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zIBYhurvXcY_qEfrYNPjjQn81tE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zIBYhurvXcY_qEfrYNPjjQn81tE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zIBYhurvXcY_qEfrYNPjjQn81tE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zIBYhurvXcY_qEfrYNPjjQn81tE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/ViqE3C0zqHQ" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/06/coredata-object-idobject-id.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQNQ3wyfCp7ImA9WxFWFko.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-988776827712271664</id><published>2010-06-02T23:32:00.034+09:00</published><updated>2010-06-05T01:53:12.294+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-05T01:53:12.294+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - Object ID（その２）モデルのバージョンを変える</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/988776827712271664/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=988776827712271664" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/988776827712271664?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/988776827712271664?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/tRg44abNlDw/coredata-object-id.html" title="CoreData - Object ID（その２）モデルのバージョンを変える" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_ZoUhefzk0CI/TAkrbHxH8PI/AAAAAAAAE2k/IMgvOWQV2iA/s72-c/100605-0004.jpg" height="72" width="72" /><thr:total>0</thr:total><content type="html">モデルのバージョンを変えると Object ID は変化するのか？試してみた。


バージョンを追加後(v2)、createdを追加した。


マッピングモデルを追加し、現在のバージョンを先程追加したもの(v2)に設定する。
 
（参考）Cocoaの日々: CoreData - マイグレーション

ビルド後に実行してみる。
（なお実行時にエラーが出る場合は、クリーニングしたのち再ビルドすると良い）。


結果は変わらず。これはまあ当然か。
１レコード追加してみる。
UUIDの部分（677CA547-...）は変わらないようだ。モデルのバージョンによって変化しないことがわかった。


SQLite DB の中身。
sqlite＞ select * from z_metadata;
1|677CA547-4D80-417A-8810-70847FB0375D|bplist00?
_
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6txxI9Xcwyk8hPGABWbg1XdUgds/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6txxI9Xcwyk8hPGABWbg1XdUgds/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6txxI9Xcwyk8hPGABWbg1XdUgds/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6txxI9Xcwyk8hPGABWbg1XdUgds/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/tRg44abNlDw" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/06/coredata-object-id.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UAQHo8fCp7ImA9WxFWFks.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-1875578833123502252</id><published>2010-06-01T23:54:00.054+09:00</published><updated>2010-06-05T01:34:01.474+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-05T01:34:01.474+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - Object ID（その１）NSManagedObjectID</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/1875578833123502252/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=1875578833123502252" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/1875578833123502252?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/1875578833123502252?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/zvUa3lx-MXw/coredata-object-idnsmanagedobjectid.html" title="CoreData - Object ID（その１）NSManagedObjectID" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_ZoUhefzk0CI/TAkq8nJoujI/AAAAAAAAE2c/dYxzByo0riE/s72-c/100605-0001.jpg" height="72" width="72" /><thr:total>0</thr:total><content type="html">NSManagedObject の Object ID
NSManagedObjectには、オブジェクトを一意に識別する為にObject ID割り振られている。この ID は NSManagedObjectID型として定義されていて、-[NSManagedObject objectID] で取得できる。

NSManagedObject Class Reference - objectID 


NSManagedObjectID
このNSManagedObjectIDは次のメソッドを持っている。
- (NSEntityDescription *)entity
- (BOOL)isTemporaryID
- (NSPersistentStore *)persistentStore
- (NSURL *)URIRepresentation
NSManagedObjectID Class 
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/952tsiLSJaoc4ijIX4zbsLqcfGs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/952tsiLSJaoc4ijIX4zbsLqcfGs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/952tsiLSJaoc4ijIX4zbsLqcfGs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/952tsiLSJaoc4ijIX4zbsLqcfGs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/zvUa3lx-MXw" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/06/coredata-object-idnsmanagedobjectid.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ACRH8_cSp7ImA9WxFWFEs.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-1589919419447835427</id><published>2010-05-31T23:53:00.023+09:00</published><updated>2010-06-02T17:02:45.149+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-02T17:02:45.149+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="category" /><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><title>Objective-C カテゴリでプロパティ</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/1589919419447835427/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=1589919419447835427" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/1589919419447835427?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/1589919419447835427?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/IvnNvSO7qJw/objective-c.html" title="Objective-C カテゴリでプロパティ" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><thr:total>0</thr:total><content type="html">例えばこんなクラスがあるとする。

Customer.h

@interface Customer :  NSManagedObject  {}
@property (nonatomic, retain) NSString * address1;@property (nonatomic, retain) NSString * postcode;@property (nonatomic, retain) NSString * lastname;@property (nonatomic, retain) NSString * address2;@property (nonatomic, retain) NSString * firstname;@property (nonatomic, retain) NSDate * birthdate;@property (nonatomic, 
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8YQyffTuNxTZmfU0CN_vau0b7b4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8YQyffTuNxTZmfU0CN_vau0b7b4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8YQyffTuNxTZmfU0CN_vau0b7b4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8YQyffTuNxTZmfU0CN_vau0b7b4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/IvnNvSO7qJw" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/05/objective-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AESXczfyp7ImA9WxFWFEg.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-6953746966916784234</id><published>2010-05-30T23:19:00.045+09:00</published><updated>2010-06-02T15:21:48.987+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-02T15:21:48.987+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="情報" /><title>今週のCocoa情報(5/30) - 今週気になった Cocoaプログラミング情報の紹介</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/6953746966916784234/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=6953746966916784234" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/6953746966916784234?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/6953746966916784234?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/S7WJuptOQho/cocoa530-cocoa.html" title="今週のCocoa情報(5/30) - 今週気になった Cocoaプログラミング情報の紹介" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><thr:total>0</thr:total><content type="html">How to get macos Log-in User Name in objective-c - Stack Overflow

Ｑ）ログイン中のユーザ名を取得するには？
Ａ）NSUserName() を使う

Foundation Functions Reference

他にも

NSFullUserName
NSHomeDirectory
NSHomeDirectoryForUser

なんてものがある。


Break on EXC_BAD_ACCESS in XCode? - Stack Overflow

EXC_BAD_ACCESS 解決に NSZombieEnabled を使う件。
CocoaDev: NSZombieEnabled



Cocoa Singleton conventions - Stack Overflow

Ｑ）シングルトンパターンを使う場合の
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KY6aelI-iaq5PaxUozyI0iExXb8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KY6aelI-iaq5PaxUozyI0iExXb8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KY6aelI-iaq5PaxUozyI0iExXb8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KY6aelI-iaq5PaxUozyI0iExXb8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/S7WJuptOQho" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/05/cocoa530-cocoa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EMSH06cSp7ImA9WxFWFEg.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-4945510817606204943</id><published>2010-05-29T23:17:00.000+09:00</published><updated>2010-06-02T15:21:29.319+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-02T15:21:29.319+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - テーブルの件数を取得する（SQL確認）</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/4945510817606204943/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=4945510817606204943" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/4945510817606204943?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/4945510817606204943?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/PJB4n1a_zws/coredata-sql.html" title="CoreData - テーブルの件数を取得する（SQL確認）" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><thr:total>0</thr:total><content type="html">以前、別のブログで CoreDataでテーブルの件数を取得する記事を書いた。

Cocoa Touch の日々: CoreData - テーブルの件数を取得する

発行される SQLを調べてなかったので確認してみた。

SELECT COUNT(*) FROM ZSTYLETAG t0※iPhoneSDK3.1.3にて


無駄なSQLは出ていないようだ（当然か）。
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lD7MoKtKqc2y1ikHovsKEuKz5uE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lD7MoKtKqc2y1ikHovsKEuKz5uE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lD7MoKtKqc2y1ikHovsKEuKz5uE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lD7MoKtKqc2y1ikHovsKEuKz5uE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/PJB4n1a_zws" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/05/coredata-sql.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYAQXgyeip7ImA9WxFXGUQ.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-1214975877194512523</id><published>2010-05-28T07:09:00.001+09:00</published><updated>2010-05-28T07:09:00.692+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-28T07:09:00.692+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - SQLite の LIMIT</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/1214975877194512523/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=1214975877194512523" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/1214975877194512523?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/1214975877194512523?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/djD6hGLxy64/coredata-sqlite-limit.html" title="CoreData - SQLite の LIMIT" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><thr:total>0</thr:total><content type="html">-[NSFetchRequest setFetchBatchSize:] で指定したサイズ値がフェッチ時に発行される SQLの LIMIT値となる。

例えば
[fetchRequest setFetchBatchSize:20];とするとSQLはこうなる。
SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZMODIFIEDDATE, t0.ZFEE, t0.ZMEMO, t0.ZCREATEDDATE, t0.ZOPERATEDDATE, t0.ZCUSTOMER FROM ZKARTE t0 WHERE  t0.Z_PK IN  (?,?,?)  ORDER BY t0.ZOPERATEDDATE DESC LIMIT 20
３件ヒットするケースで、サイズを1とすると
[fetchRequest setFetchBatchSize:1];
こうなる。
sql: 
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/o0xn5IB5tdKj6y_O5_wDjsGgdW8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o0xn5IB5tdKj6y_O5_wDjsGgdW8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/o0xn5IB5tdKj6y_O5_wDjsGgdW8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o0xn5IB5tdKj6y_O5_wDjsGgdW8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/djD6hGLxy64" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/05/coredata-sqlite-limit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8DQnc7eip7ImA9WxFXGU4.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-7440250742199546804</id><published>2010-05-27T12:55:00.013+09:00</published><updated>2010-05-27T13:17:53.902+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-27T13:17:53.902+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - 検索見本（NSManagedObjectを条件に検索）</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/7440250742199546804/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=7440250742199546804" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/7440250742199546804?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/7440250742199546804?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/RKJTXTkEO2w/coredata-nsmanagedobject.html" title="CoreData - 検索見本（NSManagedObjectを条件に検索）" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><thr:total>0</thr:total><content type="html">NSPredicate を使う。
例えば、Customer（マスタ）＜−−−＞＞ Karte（ディティール）というモデルがあり、特定の Customer に紐づく Karteの一覧を取得する場合。


// Edit PredicadeNSPredicate* predicate =  [NSPredicate predicateWithFormat:@"customer == %@", customer];[request setPredicate:predicate];

オブジェクトが条件の場合でも上記のように等号条件として書ける。

SQLite のログはこう。
SELECT 0, t0.Z_PK FROM ZKARTE t0 WHERE  t0.ZCUSTOMER = ? ORDER BY t0.ZOPERATEDDATE DESC

SELECT 0, t0.Z_PK, t0
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/N0yBRUcbthHJGonMUlAvSjCtF7M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N0yBRUcbthHJGonMUlAvSjCtF7M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/N0yBRUcbthHJGonMUlAvSjCtF7M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N0yBRUcbthHJGonMUlAvSjCtF7M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/RKJTXTkEO2w" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/05/coredata-nsmanagedobject.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQHRnY-eSp7ImA9WxFXGU4.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-2973106799014649732</id><published>2010-05-26T06:57:00.127+09:00</published><updated>2010-05-27T12:18:57.851+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-27T12:18:57.851+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - マイグレーション</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/2973106799014649732/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=2973106799014649732" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/2973106799014649732?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/2973106799014649732?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/R8vqTnmU65M/coredata_26.html" title="CoreData - マイグレーション" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_ZoUhefzk0CI/S_tolg8IG7I/AAAAAAAAEzk/HyG0fcSJ2M0/s72-c/100525-0006.png" height="72" width="72" /><thr:total>0</thr:total><content type="html">モデルの修正
CoreDataのマイグレーションを試してみた。通常モデルに修正を加えると、直前に作成したSQLiteDBは使えず実行時エラーが出る。この場合、SQLiteDBを一旦削除する必要がある。当然データの引き継ぎはできない。

エラーログ：







[16769:a0f] Error Domain=NSCocoaErrorDomain Code=134100 UserInfo=0x116760 "The managed object model version used to open the persistent store is incompatible with the one that was used to create the persistent store."[16769:a0f] This NSPersistentStoreCoordinator has 
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-CnOHYxgNHMPfYW9IqGk_aYHzEA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-CnOHYxgNHMPfYW9IqGk_aYHzEA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-CnOHYxgNHMPfYW9IqGk_aYHzEA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-CnOHYxgNHMPfYW9IqGk_aYHzEA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/R8vqTnmU65M" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/05/coredata_26.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IMQX88fip7ImA9WxFXF04.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-119406613985748167</id><published>2010-05-25T06:13:00.001+09:00</published><updated>2010-05-25T06:13:00.176+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-25T06:13:00.176+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - Xcodeでモデルクラスを自動生成する</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/119406613985748167/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=119406613985748167" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/119406613985748167?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/119406613985748167?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/LkiaJpqSI3I/coredata-xcode.html" title="CoreData - Xcodeでモデルクラスを自動生成する" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_ZoUhefzk0CI/S_ZBUED3diI/AAAAAAAAEzE/BATTCqp6CXM/s72-c/100521-0022.png" height="72" width="72" /><thr:total>0</thr:total><content type="html">Xcodeのモデルクラス自動生成機能を使った開発および運用方法など。

自動生成方法
モデルエディタでモデルを選択した後、メニューから「ファイル ＞ 新規ファイル」を選ぶと管理クラスオブジェクトが選べるようになるのでこれを選択する。

生成されるクラス下図のモデルのクラスを自動生成すると、関連（リレーションシップ）用のメソッドが追加される。



BlogEntry.h
@class Tag;@class BlogComment;
@interface BlogEntry :  NSManagedObject  {}
@property (retain) NSDate * created;@property (retain) NSString * title;@property (retain) NSString * content;@property (retain) NSSet* 
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/i0Wyip-NWBGnnNoEx_7ZjDYkkO4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i0Wyip-NWBGnnNoEx_7ZjDYkkO4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/i0Wyip-NWBGnnNoEx_7ZjDYkkO4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i0Wyip-NWBGnnNoEx_7ZjDYkkO4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/LkiaJpqSI3I" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/05/coredata-xcode.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQAR3wyeSp7ImA9WxFXFko.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-9118910775256712994</id><published>2010-05-24T12:29:00.007+09:00</published><updated>2010-05-24T12:39:06.291+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-24T12:39:06.291+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - モデル見本</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/9118910775256712994/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=9118910775256712994" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/9118910775256712994?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/9118910775256712994?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/0slpGGeocH8/coredata.html" title="CoreData - モデル見本" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_ZoUhefzk0CI/S_n0R-vx9pI/AAAAAAAAEzU/xLMjESc9Zjw/s72-c/100524-0002.png" height="72" width="72" /><thr:total>0</thr:total><content type="html">（前回）Cocoaの日々: CoreData - リレーションシップ(6) 削除ルール「アクションなし」「無効にする」の比較

前回までの検証結果を図にまとめてみた。





※SQLite のER図は Mac OS X 10.5での検証結果（10.6は未確認）

- - - -
間違い、改善点などあればぜひ教えていただきたい（コメントへどうぞ）。
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zAdjziB1aWJIosxUxctBlTpB5AE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zAdjziB1aWJIosxUxctBlTpB5AE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zAdjziB1aWJIosxUxctBlTpB5AE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zAdjziB1aWJIosxUxctBlTpB5AE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/0slpGGeocH8" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/05/coredata.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UHR3c8fCp7ImA9WxFXFko.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-193073054792061310</id><published>2010-05-23T23:18:00.007+09:00</published><updated>2010-05-24T12:20:36.974+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-24T12:20:36.974+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="情報" /><title>今週のCocoa情報(5/23) - 今週気になった Cocoaプログラミング情報の紹介</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/193073054792061310/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=193073054792061310" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/193073054792061310?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/193073054792061310?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/7hf3Zpc3ZUY/cocoa523-cocoa.html" title="今週のCocoa情報(5/23) - 今週気になった Cocoaプログラミング情報の紹介" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><thr:total>0</thr:total><content type="html">GCDを試してみる - As Sloth As Possible
面白い。参考になった。


Best way to do interprocess communication on Mac OS X - Stack Overflow
MacOSXでの プロセス間通信の方法について。
・Control files
・Sockets
・Distributed objects
など。


get the position of icons on the Desktop (cocoa OSX) - Stack Overflow
デスクトップアイコンの位置を取得するには？
⇒ FSGetCatalogInfoBulk を使う（らしい）。

File Manager Reference - FSGetCatalogInfoBulk 

Legacy: Finder Interface 
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nmUBNgugsveQOrzQHSDThky2aac/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nmUBNgugsveQOrzQHSDThky2aac/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nmUBNgugsveQOrzQHSDThky2aac/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nmUBNgugsveQOrzQHSDThky2aac/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/7hf3Zpc3ZUY" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/05/cocoa523-cocoa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YAQXw-fip7ImA9WxFXFEU.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-2873488403084814688</id><published>2010-05-22T08:39:00.067+09:00</published><updated>2010-05-22T08:39:00.256+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-22T08:39:00.256+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - リレーションシップ(6) 削除ルール「アクションなし」「無効にする」の比較</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/2873488403084814688/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=2873488403084814688" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/2873488403084814688?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/2873488403084814688?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/0JeWE6cRJNw/coredata-6.html" title="CoreData - リレーションシップ(6) 削除ルール「アクションなし」「無効にする」の比較" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_ZoUhefzk0CI/S_Yt0aHUhuI/AAAAAAAAEyk/V6HTOHn_77M/s72-c/100521-0005.gif" height="72" width="72" /><thr:total>0</thr:total><content type="html">（前回）Cocoaの日々: CoreData - リレーションシップ(5) マスター・ディティールとカスケード削除

タグを削除して削除ルールの違いを見てみる。

（参考）モデル



削除コード：

-(void)deleteFirstTag{ NSManagedObjectContext* moc = [self managedObjectContext];  // (1) fetch from BlogEntry NSLog(@"----- executeFetchRequest ------------------------------------------"); NSFetchRequest* request = [[NSFetchRequest alloc] init]; [request setEntity:[NSEntityDescription 
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5C3caoebRO3sjQOxv4i3sDxTvr0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5C3caoebRO3sjQOxv4i3sDxTvr0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5C3caoebRO3sjQOxv4i3sDxTvr0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5C3caoebRO3sjQOxv4i3sDxTvr0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/0JeWE6cRJNw" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/05/coredata-6.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUACRnw_eSp7ImA9WxFXFE8.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-6759028727953235373</id><published>2010-05-21T12:37:00.112+09:00</published><updated>2010-05-21T15:36:07.241+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-21T15:36:07.241+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - リレーションシップ(5) マスター・ディティールとカスケード削除</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/6759028727953235373/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=6759028727953235373" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/6759028727953235373?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/6759028727953235373?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/_7FIZKURc2A/coredata-5.html" title="CoreData - リレーションシップ(5) マスター・ディティールとカスケード削除" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_ZoUhefzk0CI/S_YTjLPBtNI/AAAAAAAAExE/euFgl5wiNHY/s72-c/100521-0005.gif" height="72" width="72" /><thr:total>0</thr:total><content type="html">（前回）Cocoaの日々: CoreData - リレーションシップ(4) タグを使った検索

前回までは多対多のリレーションシップでを扱ったが、今回は一般的なマスター・ディティール（１対多）を扱ってみる（順番でいけばこっちの方を先に試すべきだったかもしれない）。

まず BlogComment というモデルを追加し、BlogEntry と関連づける。
設定。

BlogComment.entry は、必須（非オプション）、削除ルール＝カスケード、としておく。

コメント登録コード：

-(void)addComment{ NSManagedObjectContext* moc = [self managedObjectContext];  // (1) fetch from BlogEntry NSFetchRequest* request = [[NSFetchRequest 
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7-k_A-ANTWVhmp8VpF1GxeEI-_Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7-k_A-ANTWVhmp8VpF1GxeEI-_Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7-k_A-ANTWVhmp8VpF1GxeEI-_Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7-k_A-ANTWVhmp8VpF1GxeEI-_Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/_7FIZKURc2A" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/05/coredata-5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEGR3szfyp7ImA9WxFXFEw.&quot;"><id>tag:blogger.com,1999:blog-9077495448448724410.post-7481483451628902481</id><published>2010-05-20T23:30:00.054+09:00</published><updated>2010-05-21T13:37:06.587+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-21T13:37:06.587+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coredata" /><title>CoreData - リレーションシップ(4) タグを使った検索</title><link rel="replies" type="application/atom+xml" href="http://xcatsan.blogspot.com/feeds/7481483451628902481/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=9077495448448724410&amp;postID=7481483451628902481" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/7481483451628902481?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9077495448448724410/posts/default/7481483451628902481?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/lQGG/~3/DHGhVHZhQGQ/coredata-4.html" title="CoreData - リレーションシップ(4) タグを使った検索" /><author><name>xcatsan</name><uri>http://www.blogger.com/profile/07611922019852427552</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://bp3.blogger.com/_ZoUhefzk0CI/R__yKBCa5HI/AAAAAAAAAaE/NFhqHEwMe-c/S220/pro.jpg" /></author><thr:total>0</thr:total><content type="html">（前回）Cocoaの日々: CoreData - リレーションシップ(3) 多対多のモデリング

今回はタグを使った検索を行ってみる。といってもエントリの検索と全く同じ。

- (void)fetchDataByTag{ NSManagedObjectContext* moc = [self managedObjectContext];  NSFetchRequest* request = [[NSFetchRequest alloc] init]; [request setEntity:[NSEntityDescription entityForName:@"Tag"   inManagedObjectContext:managedObjectContext]];  NSError* error = nil; NSLog(@"----- executeFetchRequest ----
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_Xs9edHmPwjuxdEIWENQx5FRxtQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_Xs9edHmPwjuxdEIWENQx5FRxtQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_Xs9edHmPwjuxdEIWENQx5FRxtQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_Xs9edHmPwjuxdEIWENQx5FRxtQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/lQGG/~4/DHGhVHZhQGQ" height="1" width="1"/&gt;</content><feedburner:origLink>http://xcatsan.blogspot.com/2010/05/coredata-4.html</feedburner:origLink></entry></feed>

