<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>iPhoneアプリ開発ブログ</title>
	<atom:link href="http://iphone-dev.ensites.net/feed" rel="self" type="application/rss+xml" />
	<link>http://iphone-dev.ensites.net</link>
	<description>エンサイツ株式会社による iPhone / iPod touch アプリ開発に関するTIPS等の技術情報です。</description>
	<pubDate>Fri, 23 Jan 2009 04:47:42 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CocoaでURLエンコード</title>
		<link>http://iphone-dev.ensites.net/archives/573</link>
		<comments>http://iphone-dev.ensites.net/archives/573#comments</comments>
		<pubDate>Thu, 15 Jan 2009 16:15:51 +0000</pubDate>
		<dc:creator>のむら</dc:creator>
		
		<category><![CDATA[iPhone SDK / Cocoa / Objective-C]]></category>

		<guid isPermaLink="false">http://iphone-dev.ensites.net/?p=573</guid>
		<description><![CDATA[				NSStringを指定した文字コードでURLエンコードします。
				一瞬 stringByAddingPercentEscapesUsingEncoding: のみで事足りそうに思うのですが、それだけだと下記 [...]]]></description>
			<content:encoded><![CDATA[				<p>NSStringを指定した文字コードでURLエンコードします。</p>
				<p>一瞬 stringByAddingPercentEscapesUsingEncoding: のみで事足りそうに思うのですが、それだけだと下記コード中の escapeChars にある文字達が残ってしまいます。</p>
				
				<div class="wp_syntax"><div class="code"><pre class="objc objc" style="font-family:monospace;"><span style="color: #a61390;">@implementation</span> <span style="color: #400080;">NSString</span> <span style="color: #002200;">&#40;</span>URLEncoding<span style="color: #002200;">&#41;</span>
&nbsp;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>stringByURLEncoding<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>NSStringEncoding<span style="color: #002200;">&#41;</span>encoding
<span style="color: #002200;">&#123;</span>
  <span style="color: #400080;">NSArray</span> <span style="color: #002200;">*</span>escapeChars <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSArray</span> arrayWithObjects<span style="color: #002200;">:</span>
             <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;;&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;/&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;?&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;:&quot;</span>
            ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;@&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;&amp;&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;=&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;+&quot;</span>
            ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;$&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;,&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;[&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;]&quot;</span>
            ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;#&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;!&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;'&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;(&quot;</span>
            ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;)&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;*&quot;</span>
            ,<span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;
&nbsp;
  <span style="color: #400080;">NSArray</span> <span style="color: #002200;">*</span>replaceChars <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSArray</span> arrayWithObjects<span style="color: #002200;">:</span>
              <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%3B&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%2F&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%3F&quot;</span>
             ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%3A&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%40&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%26&quot;</span>
             ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%3D&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%2B&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%24&quot;</span>
             ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%2C&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%5B&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%5D&quot;</span>
             ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%23&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%21&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%27&quot;</span>
             ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%28&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%29&quot;</span> ,<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%2A&quot;</span>
             ,<span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;
&nbsp;
  <span style="color: #400080;">NSMutableString</span> <span style="color: #002200;">*</span>encodedString <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self stringByAddingPercentEscapesUsingEncoding<span style="color: #002200;">:</span>encoding<span style="color: #002200;">&#93;</span> mutableCopy<span style="color: #002200;">&#93;</span> autorelease<span style="color: #002200;">&#93;</span>;
&nbsp;
  <span style="color: #a61390;">for</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span> i<span style="color: #002200;">=</span>0; i&lt;<span style="color: #002200;">&#91;</span>escapeChars count<span style="color: #002200;">&#93;</span>; i<span style="color: #002200;">++</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
    <span style="color: #002200;">&#91;</span>encodedString replaceOccurrencesOfString<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>escapeChars objectAtIndex<span style="color: #002200;">:</span>i<span style="color: #002200;">&#93;</span>
                                   withString<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>replaceChars objectAtIndex<span style="color: #002200;">:</span>i<span style="color: #002200;">&#93;</span>
                                      options<span style="color: #002200;">:</span>NSLiteralSearch
                                        range<span style="color: #002200;">:</span>NSMakeRange<span style="color: #002200;">&#40;</span>0, <span style="color: #002200;">&#91;</span>encodedString length<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;
  <span style="color: #002200;">&#125;</span>
&nbsp;
  <span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSString</span> stringWithString<span style="color: #002200;">:</span> encodedString<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>
				
				<p># なんでもかんでもカテゴリにすればよいというものではないのは分かっているのですが、つい…。</p>
]]></content:encoded>
			<wfw:commentRss>http://iphone-dev.ensites.net/archives/573/feed</wfw:commentRss>
		</item>
		<item>
		<title>非公開APIの使い方</title>
		<link>http://iphone-dev.ensites.net/archives/571</link>
		<comments>http://iphone-dev.ensites.net/archives/571#comments</comments>
		<pubDate>Wed, 14 Jan 2009 13:04:25 +0000</pubDate>
		<dc:creator>のむら</dc:creator>
		
		<category><![CDATA[iPhone SDK / Cocoa / Objective-C]]></category>

		<category><![CDATA[非公開API]]></category>

		<guid isPermaLink="false">http://iphone-dev.ensites.net/?p=571</guid>
		<description><![CDATA[				実際に使うかどうかはともかくとして、開発者たるもの好奇心と探究心を大切にしなければなりません。というわけで、非公開APIの使い方です（といっても特に難しいことはないのですが）。
				1. 使用するAPIの見当 [...]]]></description>
			<content:encoded><![CDATA[				<p>実際に使うかどうかはともかくとして、開発者たるもの好奇心と探究心を大切にしなければなりません。というわけで、非公開APIの使い方です（といっても特に難しいことはないのですが）。</p>
				<h3>1. 使用するAPIの見当をつける</h3>
				<p>まずは、非公開APIのリストがなくては始まりません。後述するように簡単に自作することもできるのですが、Erica Sadun 女史のサイトに分かりやすくまとまっていますのでこちらを参照するとよいのではないでしょうか。</p>
				<p><a href="http://ericasadun.com/" target="_blank">ericasadun.com</a> （Site Highlights → <a href="http://ericasadun.com/iPhoneDocs220/" target="_blank">2.2 Framework Documentation</a>）</p>
				<p>Cocoaのくどい（？）メソッド名のおかげで、地道に調べていけばお望みの機能の実装方法の見当をつけることはそれほど難しくないかと思います。</p>
				<h3>2. フレームワークを読み込む</h3>
				<p>使用したいクラスが決まったら、そのクラスが含まれるフレームワークを読み込みます。/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/System/Library/PrivateFrameworks 以下にありますね。</p>
				<h3>3. ヘッダファイルを用意する</h3>
				<p>続いて、必要なヘッダファイルを用意します。上記のサイトから地道にコピーしてきても良いのですが、行番号が入ってしまっているため面倒です。ここで活躍するのが、各種バイナリファイルから含まれるクラスのヘッダファイルを生成してくれる class-dump-x です。</p>
				<p>しかし、今確認してみたところ<a href="http://iphone.freecoder.org/classdump_en.html" target="_blank">オフィシャルサイト</a>のサーバーに接続できない状態のようです。ファイル自体は<a href="http://code.google.com/p/class-dump-x/source/checkout" target="_blank">このあたり</a>から取得できそうな感じですが（試していません）、何かあったのでしょうか…。（追記＠2009.1.16）無事復活していました。</p>
				<p>とにかく、無事アプリケーションファイルを入手できたら、/usr/local/bin あたりのパスが通ったディレクトリに配置して、</p>
				<pre>&gt; class-dump-x AddressBookUI.framework/AddressBookUI</pre>
<p>といったようにすると、AddressBookUIフレームワークに含まれるクラスのヘッダファイルに相当するソースコードがずらずらと表示されます。クラスを限定したい場合には、</p>
<pre>&gt; class-dump-x AddressBookUI.framework/AddressBookUI -C [クラス名の正規表現]</pre>
				<p>こんな感じです。-H オプションをつければ、ヘッダファイルとして吐き出してくれるのでさらに便利です。ちなみに、カテゴリに対しては（クラス名にはヒットせず）カテゴリ名のみが検索対象のようです。</p>
				<p>なお、必要なヘッダファイルで使用されているクラスのヘッダファイルも作成して、とやっているとキリがありませんので、直接使用しないクラスは @class で逃げておくとよいでしょう。</p>
				<h3>4. がんばって試行錯誤する</h3>
				<p>ここまでくれば、後はあーでもないこーでもないと試行錯誤するだけです。一応お約束なので書いておきますが、ご利用はくれぐれも自己責任でどうぞ。</p>
				<p>ちなみに、英語では「undocumented API」と呼ぶのが一般的なようです。</p>
]]></content:encoded>
			<wfw:commentRss>http://iphone-dev.ensites.net/archives/571/feed</wfw:commentRss>
		</item>
		<item>
		<title>Provisioning Profile を更新したらビルドエラー</title>
		<link>http://iphone-dev.ensites.net/archives/569</link>
		<comments>http://iphone-dev.ensites.net/archives/569#comments</comments>
		<pubDate>Wed, 14 Jan 2009 02:28:08 +0000</pubDate>
		<dc:creator>のむら</dc:creator>
		
		<category><![CDATA[Xcode]]></category>

		<category><![CDATA[Provisioning Profile]]></category>

		<category><![CDATA[ビルド]]></category>

		<guid isPermaLink="false">http://iphone-dev.ensites.net/?p=569</guid>
		<description><![CDATA[				対象デバイスを追加したため Provisioning Profile を更新したところ、下記のエラーが出てビルドに失敗しました。
				CodeSign error: a valid provisioning  [...]]]></description>
			<content:encoded><![CDATA[				<p>対象デバイスを追加したため Provisioning Profile を更新したところ、下記のエラーが出てビルドに失敗しました。</p>
				<blockquote><p>CodeSign error: a valid provisioning profile is required for product type &#8216;Application&#8217; in SDK &#8216;Device - iPhone OS 2.2&#8242;</p></blockquote>
				<p>Provisioning Profile を入れ替えた際に、ビルド設定の「コード署名ID」（ターゲット→アプリ名→情報を見る→ビルド→コード署名ID）を更新していなかったのが原因でした。</p>
				<p>実は以前も同じ問題で引っかかったのですが、この作業が久しぶりだったためすっかり忘れていました。同じことを繰り返さないように、備忘録として書いておきます。</p>
]]></content:encoded>
			<wfw:commentRss>http://iphone-dev.ensites.net/archives/569/feed</wfw:commentRss>
		</item>
		<item>
		<title>Default.pngの使い方</title>
		<link>http://iphone-dev.ensites.net/archives/539</link>
		<comments>http://iphone-dev.ensites.net/archives/539#comments</comments>
		<pubDate>Wed, 07 Jan 2009 03:07:32 +0000</pubDate>
		<dc:creator>のむら</dc:creator>
		
		<category><![CDATA[その他]]></category>

		<category><![CDATA[Default.png]]></category>

		<guid isPermaLink="false">http://iphone-dev.ensites.net/?p=539</guid>
		<description><![CDATA[				iPhoneアプリの起動時に表示される、Default.png のバリエーションをあげてみます。
				ロゴ
				もっとも無難な方法ですね。
				アプリの初期画面
				あくまでもローディング中である [...]]]></description>
			<content:encoded><![CDATA[				<p>iPhoneアプリの起動時に表示される、Default.png のバリエーションをあげてみます。</p>
				<h3>ロゴ</h3>
				<p>もっとも無難な方法ですね。</p>
				<h3>アプリの初期画面</h3>
				<p>あくまでもローディング中であることをわかりやすく書いておかないと、タッチしまくっているのに無反応という負のエクスペリエンスを与えてしまうので気をつけましょう。そうなってしまうくらいならば、ただのロゴの方がまだましかと思います。</p>
				<h3>アプリの初期画面 - UIの中身</h3>
				<p>UIの良さに定評のある駅探アプリがこの方法です。確かに、ローディング中であることをスマートに表現できる方法ですね。</p>
				<p>参考：<a href="http://www.sonasphere.com/blog/?p=671" target="_blank">かつて音楽と呼ばれたもの » Blog Archive » iPhoneアプリ開発 - 身をもって学んだ9の教訓</a></p>
				<h3>アプリの初期画面 + 操作説明</h3>
				<p>個人的にはこの方式が気に入っています。初期画面に簡単な操作説明を書き込んだ画像を表示しておけば、初めて起動した時にも操作に戸惑うことなく使い始めることができます。</p>
				<p>ただし、表示される時間が限られているので書き込む内容はギリギリまで単純化する必要があって、うまくやろうとするとなかなか難しいです。</p>
				<p>ほかにはどんなパターンが考えられるでしょうか？</p>
]]></content:encoded>
			<wfw:commentRss>http://iphone-dev.ensites.net/archives/539/feed</wfw:commentRss>
		</item>
		<item>
		<title>NSDataのMD5メッセージダイジェストを計算する</title>
		<link>http://iphone-dev.ensites.net/archives/527</link>
		<comments>http://iphone-dev.ensites.net/archives/527#comments</comments>
		<pubDate>Tue, 06 Jan 2009 09:44:17 +0000</pubDate>
		<dc:creator>のむら</dc:creator>
		
		<category><![CDATA[iPhone SDK / Cocoa / Objective-C]]></category>

		<category><![CDATA[MD5]]></category>

		<category><![CDATA[NSData]]></category>

		<category><![CDATA[カテゴリ]]></category>

		<guid isPermaLink="false">http://iphone-dev.ensites.net/?p=527</guid>
		<description><![CDATA[				NSDataクラスにMD5メッセージダイジェストを計算するメソッドを追加してみました。
				NSData+Digest.h
				
				#import 
&#160;
@interface NSData [...]]]></description>
			<content:encoded><![CDATA[				<p>NSDataクラスにMD5メッセージダイジェストを計算するメソッドを追加してみました。</p>
				<h3>NSData+Digest.h</h3>
				
				<div class="wp_syntax"><div class="code"><pre class="objc objc" style="font-family:monospace;"><span style="color: #6e371a;">#import </span>
&nbsp;
<span style="color: #a61390;">@interface</span> <span style="color: #400080;">NSData</span> <span style="color: #002200;">&#40;</span>Digest<span style="color: #002200;">&#41;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>MD5DigestString;
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>
				
				<h3>NSData+Digest.m</h3>
				
				<div class="wp_syntax"><div class="code"><pre class="objc objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;NSData+Digest.h&quot;</span>
<span style="color: #6e371a;">#import &quot;CommonCrypto/CommonDigest.h&quot;</span>
&nbsp;
<span style="color: #a61390;">@implementation</span> <span style="color: #400080;">NSData</span> <span style="color: #002200;">&#40;</span>Digest<span style="color: #002200;">&#41;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>MD5DigestString
<span style="color: #002200;">&#123;</span>
  <span style="color: #a61390;">unsigned</span> <span style="color: #a61390;">char</span> digest<span style="color: #002200;">&#91;</span>CC_MD5_DIGEST_LENGTH<span style="color: #002200;">&#93;</span>;
&nbsp;
  CC_MD5<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>self bytes<span style="color: #002200;">&#93;</span>, <span style="color: #002200;">&#91;</span>self length<span style="color: #002200;">&#93;</span>, digest<span style="color: #002200;">&#41;</span>;
&nbsp;
  <span style="color: #a61390;">char</span> md5cstring<span style="color: #002200;">&#91;</span>CC_MD5_DIGEST_LENGTH<span style="color: #002200;">*</span><span style="color: #2400d9;">2</span><span style="color: #002200;">&#93;</span>;
&nbsp;
  <span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span> i <span style="color: #002200;">=</span> 0; i &lt; CC_MD5_DIGEST_LENGTH; i<span style="color: #002200;">++</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">sprintf</span><span style="color: #002200;">&#40;</span>md5cstring<span style="color: #002200;">+</span>i<span style="color: #002200;">*</span><span style="color: #2400d9;">2</span>, <span style="color: #bf1d1a;">&quot;%02x&quot;</span>, digest<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;
  <span style="color: #002200;">&#125;</span>
&nbsp;
  <span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSString</span> stringWithCString<span style="color: #002200;">:</span>md5string length<span style="color: #002200;">:</span>CC_MD5_DIGEST_LENGTH<span style="color: #002200;">*</span><span style="color: #2400d9;">2</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>
				
				<p>参考：<a href="http://blog.coordinates.jp/2008/11/iphone-md5.html" target="_blank">iPhone で MD5 ハッシュ値を取得には？ - 1/4dot Blog</a></p>
				<p>ちなみに、最初はメソッド名を MD5Digest としていたのですが、NSDataを拡張している別のカテゴリに同名のメソッド（NSConcreteDataという非公開クラスのインスタンスとしてMD5メッセージダイジェストを返してきます）が存在するようで、そのせいで少々はまりました…。</p>
				<blockquote><p>同名のメソッドが複数のカテゴリで定義されていた場合、どのカテゴリの定義が有効になるかは保証されていません。</p></blockquote>
				<p style="text-align: right;">（「詳解 Objective-C 2.0」より）</p>
				<p style="text-align: left;">プライベートメソッドでなく公開メソッドにしておいてくれればよかったのになー、と思ったことは言うまでもありません。</p>
]]></content:encoded>
			<wfw:commentRss>http://iphone-dev.ensites.net/archives/527/feed</wfw:commentRss>
		</item>
		<item>
		<title>ソースコードからAPIリファレンスを簡単に表示</title>
		<link>http://iphone-dev.ensites.net/archives/521</link>
		<comments>http://iphone-dev.ensites.net/archives/521#comments</comments>
		<pubDate>Tue, 06 Jan 2009 03:09:19 +0000</pubDate>
		<dc:creator>のむら</dc:creator>
		
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://iphone-dev.ensites.net/?p=521</guid>
		<description><![CDATA[				Xcodeのエディタ上で、APIリファレンスを引きたいクラス名、メソッド名などをOption+ダブルクリックで該当部分が表示されます（正確には、その文字列を検索した結果のトップの項目が表示される）。
				なお [...]]]></description>
			<content:encoded><![CDATA[				<p>Xcodeのエディタ上で、APIリファレンスを引きたいクラス名、メソッド名などを<strong>Option+ダブルクリック</strong>で該当部分が表示されます（正確には、その文字列を検索した結果のトップの項目が表示される）。</p>
				<p>なお、<strong>Command+ダブルクリック</strong>だとヘッダファイルの該当部分にジャンプします。</p>
				<p>知らないとかなりもったいないですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://iphone-dev.ensites.net/archives/521/feed</wfw:commentRss>
		</item>
		<item>
		<title>iPhoneシミュレーターの写真アルバムに画像を入れる</title>
		<link>http://iphone-dev.ensites.net/archives/518</link>
		<comments>http://iphone-dev.ensites.net/archives/518#comments</comments>
		<pubDate>Mon, 05 Jan 2009 12:04:47 +0000</pubDate>
		<dc:creator>のむら</dc:creator>
		
		<category><![CDATA[iPhone SDK / Cocoa / Objective-C]]></category>

		<category><![CDATA[シミュレーター]]></category>

		<category><![CDATA[写真アルバム]]></category>

		<guid isPermaLink="false">http://iphone-dev.ensites.net/?p=518</guid>
		<description><![CDATA[				
				適当な画像ファイルをシミュレータにドラッグ＆ドロップ
				画像がSafariで開かれるので、画像の上でマウスボタンを長押し→画像を保存
				
				ただしサイズが小さく、画質が悪くなります。開 [...]]]></description>
			<content:encoded><![CDATA[				<ol>
				<li>適当な画像ファイルをシミュレータにドラッグ＆ドロップ</li>
				<li>画像がSafariで開かれるので、画像の上でマウスボタンを長押し→画像を保存</li>
				</ol>
				<p>ただしサイズが小さく、画質が悪くなります。開発にあたっては特に問題ないのですが、なんとかなりませんかね？</p>
				<p>（追記）「ただしサイズが小さく、画質が悪くなります」と思ったのですが、UIImagePickerControllerでデータを取り出してみると（オリジナル画像よりは縮小されていますが）実際にはそれなりのサイズと画質で保存されていました（おそらく、iTunes経由で転送したのと同じ状態）。iPhoneのこのあたりの処理は謎ですね…。</p>
]]></content:encoded>
			<wfw:commentRss>http://iphone-dev.ensites.net/archives/518/feed</wfw:commentRss>
		</item>
		<item>
		<title>idleTimerDisabled = NO でもスリープしない</title>
		<link>http://iphone-dev.ensites.net/archives/499</link>
		<comments>http://iphone-dev.ensites.net/archives/499#comments</comments>
		<pubDate>Fri, 26 Dec 2008 06:22:22 +0000</pubDate>
		<dc:creator>のむら</dc:creator>
		
		<category><![CDATA[iPhone SDK / Cocoa / Objective-C]]></category>

		<category><![CDATA[idleTimerDisabled]]></category>

		<category><![CDATA[自動ロック]]></category>

		<guid isPermaLink="false">http://iphone-dev.ensites.net/?p=499</guid>
		<description><![CDATA[				
				&#91;UIApplication sharedApplication&#93;.idleTimerDisabled = YES;

とすると自動ロックされない、というTIPSは今や常識なのですが、お [...]]]></description>
			<content:encoded><![CDATA[				
				<div class="wp_syntax"><div class="code"><pre class="objc objc" style="font-family:monospace;"><span style="color: #002200;">&#91;</span>UIApplication sharedApplication<span style="color: #002200;">&#93;</span>.idleTimerDisabled <span style="color: #002200;">=</span> <span style="color: #a61390;">YES</span>;</pre></div></div>

<p>とすると自動ロックされない、というTIPSは今や常識なのですが、おかしなことにこのプロパティが NO なのに自動ロックされないという現象に悩むこと小一時間。</p>
<p>デバッグ中はもともと自動ロックされないのですね、というオチでした。</p>
]]></content:encoded>
			<wfw:commentRss>http://iphone-dev.ensites.net/archives/499/feed</wfw:commentRss>
		</item>
		<item>
		<title>releaseすべきところでdeallocをすると</title>
		<link>http://iphone-dev.ensites.net/archives/492</link>
		<comments>http://iphone-dev.ensites.net/archives/492#comments</comments>
		<pubDate>Wed, 24 Dec 2008 07:57:12 +0000</pubDate>
		<dc:creator>田中 康一</dc:creator>
		
		<category><![CDATA[iPhone SDK / Cocoa / Objective-C]]></category>

		<guid isPermaLink="false">http://iphone-dev.ensites.net/?p=492</guid>
		<description><![CDATA[				iPhoneアプリ開発において、本来releaseするところでdeallocをすると当然ながら実行時にエラーが発生します。ただし、エラーが発生するのはdeallocした場所ではなく値を参照した場所となるので注意が [...]]]></description>
			<content:encoded><![CDATA[				<p>iPhoneアプリ開発において、本来releaseするところでdeallocをすると当然ながら実行時にエラーが発生します。ただし、エラーが発生するのはdeallocした場所ではなく値を参照した場所となるので注意が必要です。<br />
				以下は今回体験したdeallocとreleaseの間違えでエラーが発生してから原因にたどり着くまでの流れです。</p>
				<p><span id="more-492"></span></p>
				<p>次のようなコードを実行したところでエラーが発生しました。</p>
				
				<div class="wp_syntax"><div class="code"><pre class="objc objc" style="font-family:monospace;"><span style="color: #400080;">NSMutableArray</span><span style="color: #002200;">*</span> anArray <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSMutableArray</span> arrayWithCapacity<span style="color: #002200;">:</span> <span style="color: #2400d9;">10</span><span style="color: #002200;">&#93;</span>;
MyObject<span style="color: #002200;">*</span> obj <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>MyObject alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#91;</span>anArray addObject<span style="color: #002200;">:</span>obj<span style="color: #002200;">&#93;</span>;<span style="color: #002200;">&#91;</span>obj dealloc<span style="color: #002200;">&#93;</span>;<span style="color: #11740a; font-style: italic;">//本来はrelease</span></pre></div></div>
				
				<p><code lang="objc">id lastObj = [anArray lastObject];<br />
				if([lastObj isMemberOf:[MyObject class]]) {//ここでエラー<br />
				// 以下略</code></p>
				<p>そしてデバッグコンソールには次のようにエラーが表示されいました。</p>
				<blockquote><p>Unable to disassemble .objc_class_name_ NSKey Value Undefined Setter.</p></blockquote>
				<p>分かりにくいエラーメッセージです。ここでエラーが出た行にブレークポイントをおいて変数を見てみるとlastObjectがNSCFTypeという型を持っていることが分かりました。そこでNSCFTypeを検索すると<a title="パーマリンク: NSCFTypeと関わるエラーメッセージについて" rel="bookmark" href="http://appledev.wordpress.com/2008/09/19/nscftype%e3%81%a8%e9%96%a2%e3%82%8f%e3%82%8b%e3%82%a8%e3%83%a9%e3%83%bc%e3%83%a1%e3%83%83%e3%82%bb%e3%83%bc%e3%82%b8%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/">NSCFTypeと関わるエラーメッセージについて</a>を発見しました。このエントリには次のようにあります</p>
				<blockquote><p>要するに、メモリ管理が間違っていて使おうとしているインスタンスなどが既に解放された場合にこの「NSCFType」というものが出現するらしい。</p></blockquote>
				<p>とメモリ管理周りの不具合であることがわかりました。そしてようやくreleaseであるべき場所がdeallocになっていることに気がついたのでした。</p>
]]></content:encoded>
			<wfw:commentRss>http://iphone-dev.ensites.net/archives/492/feed</wfw:commentRss>
		</item>
		<item>
		<title>NSUndoManagerをiPhoneOSで使いたい</title>
		<link>http://iphone-dev.ensites.net/archives/487</link>
		<comments>http://iphone-dev.ensites.net/archives/487#comments</comments>
		<pubDate>Mon, 22 Dec 2008 08:21:55 +0000</pubDate>
		<dc:creator>田中 康一</dc:creator>
		
		<category><![CDATA[iPhone SDK / Cocoa / Objective-C]]></category>

		<guid isPermaLink="false">http://iphone-dev.ensites.net/?p=487</guid>
		<description><![CDATA[				詳解Objective-C2.0を見ると、アンドゥ機能を実現するためのクラスNSUndoManagerがFoundation Frameworkに存在すると書いてありました。ところが、XCode上でNSUndoM [...]]]></description>
			<content:encoded><![CDATA[				<p>詳解Objective-C2.0を見ると、アンドゥ機能を実現するためのクラスNSUndoManagerがFoundation Frameworkに存在すると書いてありました。ところが、XCode上でNSUndoManagerが補完されません。何か設定が必要なのでしょうか。</p>
				<p>そこでドキュメントを調べてみるとiPhone OS Technology Overviewに次のような記述が有りました。</p>
				<blockquote><p>Undo management<br />
				The <code>NSUndoManager</code> class is not available, and there is no automatic support for undoing operations in iPhone OS.</p></blockquote>
				<p>残念なことに、iPhoneOSにはNSUndoManagerが存在しないようです。</p>
				<p>では、iPhone OSでのundoの好ましい実装はどのようになるのかとさらにドキュメントを調べるとCocoa Fundamentals Guideの「What Is A Design Pattern?」に例としてあげられているCommandパターンの中でundo,redoに触れていることが分かりました。CommandパターンはMementoパターンと並んでUndo実装の定石ですので、問題になるのはCommandパターンの実装方法です。</p>
				<p>同ドキュメントによると、Commandパターンやタイマー呼び出しなどの為にNSInvocationが用意されていると有ります。NSInvocationは事前にオブジェクト、メッセージ、引数を設定しておき後から実行(Invoke)するためのクラスです。詳しい使い方については<a href="http://www.oomori.com/cocoafw/Foundation/NSInvocation/invocationWihodSignature.html">oomori.com Cocoa Reference</a>が分かりやすく書かれていました。NSUndoManagerもこのNSInvocationを用いて実装されているようです。</p>
]]></content:encoded>
			<wfw:commentRss>http://iphone-dev.ensites.net/archives/487/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
