<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2898754416980320866</id><updated>2011-08-29T22:31:11.233+09:00</updated><category term='linux'/><category term='picasa'/><category term='objective-c'/><category term='socket'/><category term='iPhone'/><category term='xcode'/><category term='git'/><category term='UIViewController'/><category term='UIImageView'/><category term='notIB'/><category term='UIWindow'/><category term='tutorial'/><category term='shortcuts'/><category term='property'/><category term='UIImage'/><category term='UIView'/><category term='memory'/><category term='NSString'/><category term='UITextField'/><category term='UINavigationController'/><category term='modal'/><category term='c'/><title type='text'>study memo</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kyykblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>45</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-140332480115149272</id><published>2010-12-02T11:23:00.003+09:00</published><updated>2010-12-02T11:57:59.827+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='picasa'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><title type='text'>GDA のクラス関係</title><content type='html'>Google Data APIs Objective-c Client Library (GDA) の、picasa 関連のクラス関係図をxcode で一部可視化してみる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_B66rCObfG4g/TPcC8d5BkUI/AAAAAAAABCc/xCK9hjXkLok/s1600/GData_Picasa%25E3%2582%25AF%25E3%2583%25A9%25E3%2582%25B9%25E5%259B%25B3.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="54" src="http://2.bp.blogspot.com/_B66rCObfG4g/TPcC8d5BkUI/AAAAAAAABCc/xCK9hjXkLok/s320/GData_Picasa%25E3%2582%25AF%25E3%2583%25A9%25E3%2582%25B9%25E5%259B%25B3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;GDataFeedPhotoBase と GDataEntryPhotoBase のスーパークラスは共に、GDataObject クラスである。&lt;br /&gt;&lt;br /&gt;--------&lt;br /&gt;xcode でクラス図を作成する。&lt;br /&gt;設計 -&amp;gt; クラスモデル -&amp;gt; クイックモデル&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-140332480115149272?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/140332480115149272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/140332480115149272'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/12/gda.html' title='GDA のクラス関係'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_B66rCObfG4g/TPcC8d5BkUI/AAAAAAAABCc/xCK9hjXkLok/s72-c/GData_Picasa%25E3%2582%25AF%25E3%2583%25A9%25E3%2582%25B9%25E5%259B%25B3.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-275943403507460922</id><published>2010-12-01T21:51:00.000+09:00</published><updated>2010-12-01T21:51:01.708+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UIImage'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='UIImageView'/><title type='text'>UIImage でURL の画像を表示する。</title><content type='html'>&lt;pre class="prettyprint linenums:1"&gt;  NSString *path = @"http://*******/************/**.jpg"; // URL&lt;br /&gt;  NSURL* url = [NSURL URLWithString:path];&lt;br /&gt;  NSData* data = [NSData dataWithContentsOfURL:url];&lt;br /&gt;  photo = [[UIImageView alloc] initWithImage:[[UIImage alloc] initWithData:data]];&lt;br /&gt;  [self.view photo];  &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-275943403507460922?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/275943403507460922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/275943403507460922'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/12/uiimage-url.html' title='UIImage でURL の画像を表示する。'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-6161470581237899317</id><published>2010-11-15T09:58:00.001+09:00</published><updated>2010-12-08T11:32:03.374+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='property'/><category scheme='http://www.blogger.com/atom/ns#' term='objective-c'/><title type='text'>プロパティに関するコーディングルール</title><content type='html'>Google Objective-c スタイルガイド 日本語訳 の、プロパティについて以下を参考にする。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;文字列には copy を使うこと&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;NSStringプロパティには、必ず copy 属性を宣言するべきです。&lt;br /&gt;&lt;br /&gt;これは論理的には、NSString のセッタには必ず、retain の代わりに copy を使わなければならない、というルールに従ったものです。&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;アトミック性&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;プロパティにはオーバーヘッドがあることを認識しておいてください。デフォルトでは、同期のセッタとゲッタはすべてアトミックになります。そのため、セットとゲットの呼び出しには同期オーバーヘッドがかなりあります。アトミック性が必要ないなら、プロパティを nonatomic と宣言しておいてください。&lt;/blockquote&gt;&lt;br /&gt;Delegate パターンについても以下を参考にする。&lt;br /&gt;&lt;b&gt;Delegate パターン&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;Delegate オブジェクトを retain するべきではない。&lt;/blockquote&gt;&lt;br /&gt;&lt;-- 追記 --&gt;&lt;br /&gt;&lt;b&gt;命名規則&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;プロパティに対応するインスタンス変数名は、アンダースコア（_）で終わらなければなりません。プロパティ名は、対応するインスタンス変数名から最後のアンダースコア（_）を取り除いたものにするべきです。&lt;/blockquote&gt;&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;@interface MyClass : NSObject {&lt;br /&gt; @private&lt;br /&gt;  NSString *name_;&lt;br /&gt;}&lt;br /&gt;@property(copy, nonatomic) NSString *name;&lt;br /&gt;@end&lt;br /&gt;&lt;br /&gt;@implementation MyClass&lt;br /&gt;@synthesize name = name_; // インスタンス名を隠蔽できる。&lt;br /&gt;@end&lt;br /&gt;// ------------------------------------&lt;br /&gt;NSLog("%@", self.name);&lt;br /&gt;&lt;br /&gt;-(void) dealloc{&lt;br /&gt;  self.name = nil;&lt;br /&gt;  [super dealloc];&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;参考&lt;br /&gt;&lt;a href="http://www.textdrop.net/google-styleguide-ja/objcguide.xml?showone=Delegate%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3#Delegate%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3"&gt;Google Objective-c スタイルガイド 日本語訳&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-6161470581237899317?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/6161470581237899317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/6161470581237899317'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/11/blog-post_15.html' title='プロパティに関するコーディングルール'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-3138682976465106415</id><published>2010-11-13T22:14:00.001+09:00</published><updated>2010-11-15T08:59:38.750+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='objective-c'/><title type='text'>プロパティ</title><content type='html'>&lt;b&gt;目的*1&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;■ プロパティ宣言により、アクセサメソッドの動作方法の明瞭で明示的な仕様を指定できます。&lt;br /&gt;■ コンパイラは、宣言で指定された仕様に従ってアクセサメソッドを合成できます。これは、コードの記述と保守が少量で済むことを意味します。&lt;br /&gt;■ プロパティは構文上は識別子として表現され、範囲付きであるため、コンパイラは宣言されていないプロパティの使用を検出できます。&lt;br /&gt;■ あるクラスによって宣言されたプロパティの実行時のイントロスペクション。&lt;br /&gt;&lt;/blockquote&gt;-----------------------------------&lt;br /&gt;&lt;br /&gt;&lt;b&gt;イントロスペクション（リフレクション）*2&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;通常、プログラムのソースコードがコンパイルされると、プログラムの構造などの情報は低レベルコード（アセンブリ言語など）に変換される過程で失われてしまう。リフレクションをサポートする場合、そのような情報は生成されるコードの中にメタデータとして保存される。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;宣言属性&lt;/b&gt;&lt;br /&gt;iPhone 開発で主に使用される属性をまとめた。&lt;br /&gt;&lt;table border="1"&gt;&lt;tr&gt;     &lt;th bgcolor="#CCCCFF"&gt;プロパティ属性&lt;/th&gt;     &lt;th&gt;説明&lt;/th&gt;   &lt;/tr&gt;&lt;tr&gt;     &lt;td bgcolor="#CCCCFF"&gt;assign&lt;/td&gt;     &lt;td&gt;setterで単純代入を使用することを指定する&lt;/td&gt;   &lt;/tr&gt;&lt;tr&gt;     &lt;td bgcolor="#CCCCFF"&gt;retain&lt;/td&gt;     &lt;td&gt;代入時にオブジェクトに対してretain を呼び出す必要があることを指定する&lt;/td&gt;   &lt;/tr&gt;&lt;tr&gt;     &lt;td bgcolor="#CCCCFF"&gt;copy&lt;/td&gt;     &lt;td&gt;代入にオブジェクトのコピーを使用することを指定する&lt;/td&gt;   &lt;/tr&gt;&lt;tr&gt;     &lt;td bgcolor="#CCCCFF"&gt;nonatomic&lt;/td&gt;     &lt;td&gt;合成されるアクセサが非アトミックになるように指定する&lt;/td&gt;   &lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;retain*3&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;クライアントオブジェクト側において、プログラム上の有効範囲を超えた後も受け取ったオブジェクトを保持する必要がある場合は、受け取ったオブジェクトを保持できます。それには、retainメッセージを送信します。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;nonatomic*4&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;nonatomic属性の影響は環境によって異なります。デフォルトでは、合成されるアクセサはすべてアトミックです。マネージドメモリ環境では、アトミックな動作を保証するにはロックを使用する必要があります。また、返されるオブジェクトは保持され自動解放されます。このようなアクセサが頻繁に呼び出されると、アトミックな動作はパフォーマンスに重大な影響をもたらすことがあります。ガベージコレクトされる環境では、ほとんどの合成メソッドはこうしたオーバーヘッドなし&lt;br /&gt;でアトミックになります。&lt;br /&gt;アトミックな実装の目的は堅牢なアクセサを提供することであり、コードの正確性を保証することではないことを理解することが重要です。「アトミック」とは、プロパティへのアクセスがスレッドセーフであるという意味ですが、単にクラス内のすべてのプロパティをアトミックにするだけでそのクラス（一般にはオブジェクトグラフ）が「スレッドセーフ」になるということではありません。スレッドの安全性を個々のアクセサメソッドのレベルで表現することはできません。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;参照&lt;br /&gt;&lt;br /&gt;*1&lt;br /&gt;&lt;a href="http://developer.apple.com/jp/devcenter/ios/library/documentation/ObjC.pdf"&gt;Objective-C 2.0 プログラミング言語&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;*2&lt;br /&gt;&lt;a href="http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%83%88%E3%83%AD%E3%82%B9%E3%83%9A%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3"&gt;イントロスペクション（リフレクション）&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;*3&lt;br /&gt;&lt;a href="http://developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaFundamentals.pdf"&gt;Cocoa Fundamentals Guide / cocoaオブジェクトのライフサイクル&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;*4&lt;br /&gt;&lt;a href="http://developer.apple.com/jp/devcenter/ios/library/documentation/ObjC.pdf"&gt;objective-c 2.0 プログラミング言語 / パフォーマンスとスレッド&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-3138682976465106415?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/3138682976465106415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/3138682976465106415'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/11/blog-post_13.html' title='プロパティ'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-928644368173488100</id><published>2010-11-12T22:13:00.002+09:00</published><updated>2010-11-13T21:16:23.479+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='memory'/><category scheme='http://www.blogger.com/atom/ns#' term='objective-c'/><title type='text'>参照カウンタ</title><content type='html'>objective-c のメモリ管理方法。&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;基本原則&lt;/b&gt;&lt;br /&gt;「alloc」または「new」で始まる名前のメソッドや、「copy」を含む名前のメソッド（たとえば、alloc、newObject、mutableCopy）を使用してオブジェクトを作成した場合、またはオブジェクトにretainメッセージを送信した場合は、そのオブジェクトの所有権を取得できます。&lt;br /&gt;その場合は、releaseまたはautoreleaseを使用してオブジェクトの所有権を放棄する責任が&lt;br /&gt;あります。それ以外の方法でオブジェクトを受け取った場合は、そのオブジェクトを解放してはなりません。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tr&gt;     &lt;th bgcolor="#CCCCFF"&gt;メッセージ&lt;/th&gt;     &lt;th&gt;保持カウント&lt;/th&gt;   &lt;/tr&gt;&lt;tr&gt;     &lt;td bgcolor="#CCCCFF"&gt;alloc&lt;/td&gt;     &lt;td&gt;１にする&lt;/td&gt;   &lt;/tr&gt;&lt;tr&gt;     &lt;td bgcolor="#CCCCFF"&gt;copy&lt;/td&gt;     &lt;td&gt;１にする&lt;/td&gt;   &lt;/tr&gt;&lt;tr&gt;     &lt;td bgcolor="#CCCCFF"&gt;new&lt;/td&gt;     &lt;td&gt;１にする&lt;/td&gt;   &lt;/tr&gt;&lt;tr&gt;     &lt;td bgcolor="#CCCCFF"&gt;retain&lt;/td&gt;     &lt;td&gt;１つ増える&lt;/td&gt;   &lt;/tr&gt;&lt;tr&gt;     &lt;td bgcolor="#CCCCFF"&gt;release&lt;/td&gt;     &lt;td&gt;１つ減る&lt;/td&gt;   &lt;/tr&gt;&lt;tr&gt;     &lt;td bgcolor="#CCCCFF"&gt;autorelease&lt;/td&gt;     &lt;td&gt;１つ減る（ただし、任意のタイミング）&lt;/td&gt;   &lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;参考&lt;br /&gt;&lt;a href="http://developer.apple.com/jp/devcenter/ios/library/japanese.html"&gt;Cocoaメモリ管理プログラミングガイド&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-928644368173488100?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/928644368173488100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/928644368173488100'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/11/blog-post.html' title='参照カウンタ'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-4500348152467414112</id><published>2010-11-10T15:21:00.002+09:00</published><updated>2010-11-10T16:01:34.435+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><category scheme='http://www.blogger.com/atom/ns#' term='shortcuts'/><title type='text'>戻る／進む（unDo／reDo）</title><content type='html'>戻る／進む を行うショートカット&lt;br /&gt;&lt;br /&gt;戻る&lt;br /&gt;⌘ + option + ←&lt;br /&gt;&lt;br /&gt;進む&lt;br /&gt;⌘ + option + →&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-4500348152467414112?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4500348152467414112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4500348152467414112'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/11/undoredo.html' title='戻る／進む（unDo／reDo）'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-6015701275261836873</id><published>2010-11-09T14:58:00.002+09:00</published><updated>2010-12-05T14:48:30.129+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>Dropbox に gitレポジトリを作成する</title><content type='html'>1.&lt;br /&gt;Dropbox フォルダ内に gitレポジトリ用のフォルダを作成する。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;cd ~/Dropbox&lt;br /&gt;mkdir repository&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2.&lt;br /&gt;上記フォルダ内に、[プロジェクト名].git というフォルダを作成して init する。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;cd repository&lt;br /&gt;mkdir ProjectName.git&lt;br /&gt;cd ProjectName.git&lt;br /&gt;git --bare init&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;blockquote&gt;--bare&lt;br /&gt;Create a bare repository. If GIT_DIR environment is not set, it is set to the current working directory. *1&lt;br /&gt;&lt;br /&gt;裸のリポジトリ(bare repository)&lt;br /&gt;裸のリポジトリとは、通常 .git の拡張子を持つ ディレクトリ で、 リビジョン管理下にあるチェックアウトしたファイルをローカルに持たないディレクトリです。 通常 .git サブディレクトリ に隠れている git の管理ファイル全てが repository.git ディレクトリに直接存在し、 他のファイルは存在せず、チェックアウトもされていません。 通常、公開リポジトリを出版する人は、裸のリポジトリを作成します。*2&lt;/blockquote&gt;&lt;br /&gt;3.&lt;br /&gt;既存のソースを追加するためには、そのプロジェクト上で以下のコマンドを実行する。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;cd ~/develop/OldProject&lt;br /&gt;git init&lt;br /&gt;git add . // 全てのファイルを追加する&lt;br /&gt;git commit&lt;br /&gt;git push ~/Dropbox/repository/ProjectName.git master&lt;br /&gt;git remote add origin ~/Dropbox/repository/ProjectName.git&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4.&lt;br /&gt;ファイルを更新した後、以下のように更新したファイルの addとcommitを行い、さらに ローカルレポジトリ（既存プロジェクト）をリモートレポジトリ（Dropbox に作成したレポジトリ）へ push する。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;git add ~/develop/OldProject/oldfile.h // 変更を全て含む場合、git add --a&lt;br /&gt;git commit // コメントを追加する場合は、git commit -m "(コメント入力)"&lt;br /&gt;git push ~/Dropbox/repository/ProjectName.git master //git push origin master でも可&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;参考：&lt;br /&gt;*1&lt;br /&gt;&lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-init.html"&gt;git-init(1) Manual Page&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;*2&lt;br /&gt;&lt;a href="http://www8.atwiki.jp/git_jp/pub/Documentation.ja/user-manual.html#def_bare_repository"&gt;Chapter11. GIT用語集 裸のレポジトリ&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-6015701275261836873?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/6015701275261836873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/6015701275261836873'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/11/dropbox-git.html' title='Dropbox に gitレポジトリを作成する'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-6277745658318923035</id><published>2010-11-06T21:45:00.001+09:00</published><updated>2010-11-09T09:50:06.833+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='picasa'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><title type='text'>iPhone で Picasa クライアントを作成する準備</title><content type='html'>Google Date API&lt;br /&gt;http://code.google.com/intl/ja/apis/gdata/index.html&lt;br /&gt;&lt;br /&gt;Google Date API にアクセスして、Picasa データを取得する。&lt;br /&gt;iPhone で利用するためには、gdata-objectivec-client を静的ライブラリとして組み込む。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;参考資料&lt;/b&gt;&lt;br /&gt;BuildingTheLibrary の、Linking to the iPhone Static Library の内容に（ほぼ）従う。&lt;br /&gt;http://code.google.com/p/gdata-objectivec-client/wiki/BuildingTheLibrary&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ライブラリの準備&lt;/b&gt;&lt;br /&gt;下記場所からダウンロードできるが、ビルドエラーが出る。&lt;br /&gt;ライブラリ名：gdata-objective-client-1.10.0.zip&lt;br /&gt;http://code.google.com/p/gdata-objectivec-client/downloads/list&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_B66rCObfG4g/TNVLU2lv_gI/AAAAAAAABAg/-BRabGhQ9aY/s1600/Build+failed.png" imageanchor="1" style=""&gt;&lt;img border="0" height="214" width="320" src="http://2.bp.blogspot.com/_B66rCObfG4g/TNVLU2lv_gI/AAAAAAAABAg/-BRabGhQ9aY/s320/Build+failed.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;なので、svn から直接ダウンロードして、iPhone プロジェクトのディレクトリに入れる。&lt;br /&gt;http://code.google.com/p/gdata-objectivec-client/source/checkout&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;svn checkout http://gdata-objectivec-client.googlecode.com/svn/trunk/ gdataClient&lt;br /&gt;mv  gdataClient samplePicasa&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;gdata-objectivec-client をビルドするための準備&lt;/b&gt;&lt;br /&gt;1.&lt;br /&gt;gdataClient -&gt; Source -&gt; GData.xcodeproj を開く。&lt;br /&gt;2.&lt;br /&gt;ビルドターゲットを GDataTouchStaticLib に変更する。&lt;br /&gt;　今回作成する静的ライブラリはコレなので、他はターゲットから外す。&lt;br /&gt;3-1.&lt;br /&gt;ターゲット -&gt; GDataTouchStaticLib -&gt; 情報を見る -&gt; ビルドタブ  構成：release を表示する。&lt;br /&gt;設定 -&gt; ベースSDK を、iPhoneデバイス4.0 に変更する。&lt;br /&gt;設定 -&gt; アーキテクチャ を、Standard に変更する。&lt;br /&gt;&lt;br /&gt;3-2.&lt;br /&gt;その他のCフラグに以下を追加する。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;-DGDATA_INCLUDE_PHOTOS_SERVICE=1&lt;br /&gt;&lt;/pre&gt;　picasa を利用する場合の設定はこのようになる。それ以外のgdataを利用する場合は、参考 *2 を参照する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_B66rCObfG4g/TNVL0aUzisI/AAAAAAAABAo/I1K0I7YmTlI/s1600/3-1.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="187" width="320" src="http://4.bp.blogspot.com/_B66rCObfG4g/TNVL0aUzisI/AAAAAAAABAo/I1K0I7YmTlI/s320/3-1.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;4.&lt;br /&gt;Simulator, Device それぞれReleaseビルドを実行する。&lt;br /&gt;5.&lt;br /&gt;出力されたライブラリを lipo コマンドを使用して統合する。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;cd samplePicasa/gdataClient/Source/build&lt;br /&gt;lipo -create Release-iphoneos/libGDataTouchStaticLib.a Release-iphonesimulator/libGDataTouchStaticLib.a -output libGDataTouchStaticLib.a&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;iPhoneプロジェクトにライブラリを追加する&lt;/b&gt;&lt;br /&gt;6.&lt;br /&gt;libGDataTouchStaticLib.a を iPhoneプロジェクトに追加する。&lt;br /&gt;　今回のiphoneプロジェクト名は samplePicasa とする。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_B66rCObfG4g/TNVMkVVbUyI/AAAAAAAABAw/TxxTS10Tjsk/s1600/%EF%BC%96.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="222" width="320" src="http://4.bp.blogspot.com/_B66rCObfG4g/TNVMkVVbUyI/AAAAAAAABAw/TxxTS10Tjsk/s320/%EF%BC%96.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;7-1.&lt;br /&gt;samplePicasa -&gt; 情報を見る -&gt; ビルド 全ての構成 を表示する。&lt;br /&gt;他のリンカフラグに、-ObjC -lxml2 を追加する。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_B66rCObfG4g/TNVM4ayZ7UI/AAAAAAAABA4/USaDSctdIFs/s1600/7-1.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="187" width="320" src="http://2.bp.blogspot.com/_B66rCObfG4g/TNVM4ayZ7UI/AAAAAAAABA4/USaDSctdIFs/s320/7-1.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;7-2.&lt;br /&gt;ヘッダ検索パスに、次の２つのパスを追加する。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;/usr/include/libxml2 → 再帰的にチェックする。&lt;br /&gt;$(SRCROOT)/gdataClient/Source/build/Release-$(PLATFORM_NAME)/Headers&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_B66rCObfG4g/TNVNBPAKppI/AAAAAAAABBA/KLEx9nhTJQg/s1600/7-2.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="186" width="320" src="http://2.bp.blogspot.com/_B66rCObfG4g/TNVNBPAKppI/AAAAAAAABBA/KLEx9nhTJQg/s320/7-2.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;8.&lt;br /&gt;適当なファイルに #import "GData.h" を追加してビルドが通れば完了。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;参考&lt;br /&gt;*1&lt;br /&gt;&lt;a href="http://developer.apple.com/jp/devcenter/ios/library/japanese.html"&gt;iPhone開発ガイド　第３章アプリケーションの実行　ビルド環境の設定&lt;/a&gt;&lt;br /&gt;*2&lt;br /&gt;&lt;a href="http://code.google.com/p/gdata-objectivec-client/wiki/BuildingTheLibrary#Removing_Unneeded_Code"&gt;Removing Unneeded Code&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-6277745658318923035?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/6277745658318923035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/6277745658318923035'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/11/iphone-picasa.html' title='iPhone で Picasa クライアントを作成する準備'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_B66rCObfG4g/TNVLU2lv_gI/AAAAAAAABAg/-BRabGhQ9aY/s72-c/Build+failed.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-2139688304235150545</id><published>2010-10-05T16:24:00.000+09:00</published><updated>2010-10-05T16:24:26.295+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='socket'/><title type='text'>TCP ACCEPT関数</title><content type='html'>&lt;blockquote&gt;accept - ソケットへの接続を受ける&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;struct sockadd_in の実装は以下の通り。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;struct sockaddr_in {&lt;br /&gt;    sa_family_t    sin_family; /* address family: AF_INET */&lt;br /&gt;    in_port_t      sin_port;   /* port in network byte order */&lt;br /&gt;    struct in_addr sin_addr;   /* internet address */&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;/* Internet address. */&lt;br /&gt;struct in_addr {&lt;br /&gt;    uint32_t       s_addr;     /* address in network byte order */&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ここで、inet_ntoa()関数を使用して sockaddr_in 構造体から IP アドレスを表示させる実装は、以下のようになる。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;printf("IP = %s\n", inet_ntoa(client.sin_addr));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ただし、次のヘッダーファイルをインクルードしなければ、表示されないので注意！&lt;br /&gt;&lt;blockquote&gt;&amp;lt;arpa/inet.h&amp;gt;&lt;br /&gt;数値としてIPアドレスを操作する機能の定義&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;参考：&lt;br /&gt;&lt;a href="http://www.linux.or.jp/JM/html/LDP_man-pages/man2/accept.2.html"&gt;ACCEPT&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ja.wikipedia.org/wiki/%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88_(BSD)"&gt;ソケット（BSD）&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-2139688304235150545?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/2139688304235150545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/2139688304235150545'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/10/tcp-accept.html' title='TCP ACCEPT関数'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-9082272235243100824</id><published>2010-10-05T16:20:00.000+09:00</published><updated>2010-10-05T16:20:10.970+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='socket'/><title type='text'>TCP</title><content type='html'>TCPとは、以下のことを言う。&lt;br /&gt;&lt;blockquote&gt;Transmission Control Protocol（トランスミッション コントロール プロトコル、TCP）&lt;br /&gt;セッションという形で1対1の通信を実現し、パケットシーケンスチェックによる欠損パケット再送などのエラー訂正機能などを持ち、データ転送などの信頼性の必要な場面でよく使用される。一方他のトランスポート層プロトコルに比べ、プロトコル上のオーバヘッドが大きい為、比較的低速となる。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;サーバー側の実装は以下の手順で行う。&lt;br /&gt;&lt;blockquote&gt;1.&lt;br /&gt;socket(2) でソケットを作成する。&lt;br /&gt;2.&lt;br /&gt;bind(2) を使ってソケットにローカルアドレスを割り当てて、 他のソケットがこのソケットに connect(2) できるようにする。&lt;br /&gt;3.&lt;br /&gt;listen() を使って、接続要求を受け付ける意志と接続要求を入れるキュー長を指定する。&lt;br /&gt;4.&lt;br /&gt;accept(2) を使って接続を受け付ける。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;参考：&lt;br /&gt;&lt;a href="http://ja.wikipedia.org/wiki/Transmission_Control_Protocol"&gt;Transmission Control Protocol(TCP)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linux.or.jp/JM/html/LDP_man-pages/man2/listen.2.html"&gt;LISTEN&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-9082272235243100824?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/9082272235243100824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/9082272235243100824'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/10/tcp.html' title='TCP'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-6657580192726583025</id><published>2010-10-04T16:59:00.000+09:00</published><updated>2010-10-04T16:59:11.294+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='c'/><title type='text'>ctrl-c で強制終了</title><content type='html'>無限ループ等で処理が終わらなくなった場合、次のやり方で処理を止める。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;ctrl-c&lt;br /&gt;&lt;/pre&gt;これをすれば、処理は強制終了する。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-6657580192726583025?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/6657580192726583025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/6657580192726583025'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/10/ctrl-c.html' title='ctrl-c で強制終了'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-2042329939210474573</id><published>2010-10-04T16:23:00.001+09:00</published><updated>2010-10-04T16:24:06.573+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c'/><title type='text'>memset関数で出たwarning</title><content type='html'>char型配列 buf[] を「０」で埋めるため、以下の処理を書いたら warning が発生した。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;memset(buf, 0, sizeof(buf));&lt;br /&gt;&lt;/pre&gt;&lt;pre class="prettyprint linenums:1"&gt;warning: incompatible implicit declaration of built-in function ‘memset’&lt;br /&gt;&lt;/pre&gt;対処方法&lt;br /&gt;→ #include&amp;lt;string.h&amp;gt; しましょう！！！&lt;br /&gt;man memset を見れば、SYNOPSIS（概要）に書いてある。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-2042329939210474573?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/2042329939210474573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/2042329939210474573'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/10/memsetwarning.html' title='memset関数で出たwarning'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-4649922767215531134</id><published>2010-09-22T11:27:00.018+09:00</published><updated>2010-09-30T15:23:19.671+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Day6 Reaction Time（３）信号機画像を追加する</title><content type='html'>&lt;b&gt;信号機ケーブル画像を追加する&lt;/b&gt;&lt;br /&gt;画像をプログラミングで、表示したい位置に追加するために以下のように実装した。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;UIImage* stopLightCableImage = [UIImage imageNamed:@"stopLightCable.png"];&lt;br /&gt; UIImageView* stopLightCableView = [[UIImageView alloc] initWithImage:stopLightCableImage];&lt;br /&gt; stopLightCableView.frame = CGRectMake(150, 0, stopLightCableImage.size.width, stopLightCableImage.size.height);&lt;br /&gt; stopLightCableView.image = stopLightCableImage;&lt;br /&gt; [self.view addSubview:stopLightCableView];&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;２行目&lt;br /&gt;initWithImage メソッドで指定した画像で初期化する。&lt;br /&gt;&lt;br /&gt;３行目&lt;br /&gt;UIImageView の frame メソッドで表示位置を指定する。&lt;br /&gt;→ bounds メソッドでは、stopLightCableView の、ローカルな座標の指定になるので間違い。frame メソッドで、親Viewから見た座標で位置を指定する。&lt;br /&gt;&lt;a href="http://kyykblog.blogspot.com/2010/09/frame-boundscenter.html"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;４行目&lt;br /&gt;image プロパティに画像を指定する。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;信号機画像３種類をランダムに表示させるメソッドを実装する&lt;/b&gt;&lt;br /&gt;&lt;font color="#7b68ee"&gt;&lt;br /&gt;以下の内容を訂正する。これではやりたかったことが実現できないので。。&lt;br /&gt;訂正ここから-----------------------------------&lt;br /&gt;以下のように実装した。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;-(NSArray *)makeAnimationImagesArray{&lt;br /&gt;&lt;br /&gt; NSMutableArray* trafficLightArray = [NSMutableArray arrayWithObjects:&lt;br /&gt;         [UIImage imageNamed:@"redLightSmall.png"],&lt;br /&gt;         [UIImage imageNamed:@"yellowLightSmall.png"],&lt;br /&gt;         [UIImage imageNamed:@"greenLightSmall.png"], nil];&lt;br /&gt;&lt;br /&gt; int count = [trafficLightArray count];&lt;br /&gt; srand([[NSDate date] timeIntervalSinceReferenceDate]);&lt;br /&gt; &lt;br /&gt; int i = 0;&lt;br /&gt; for(i=0; i&lt;10; i++){&lt;br /&gt;  NSUInteger pos1 = rand() % count;&lt;br /&gt;  NSUInteger pos2 = rand() % count;&lt;br /&gt;  &lt;br /&gt;  [trafficLightArray exchangeObjectAtIndex:pos1 withObjectAtIndex:pos2];&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; return(trafficLightArray);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;９行目擬似乱数の発生系列を変更する種を、現在時刻から生成する。&lt;br&gt;１０行目〜0〜2をランダムに生成する。訂正ここまで-----------------------------------&lt;/font&gt;&lt;br&gt;&lt;br&gt;改めて、&lt;b&gt;信号機画像３種類を表示させる&lt;/b&gt;&lt;br&gt;次のメソッドを使用して、現行ループにタイマーとスケジュールを作成する。&lt;blockquote&gt;scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:&lt;br&gt;Creates and returns a new NSTimer object and schedules it on the current run loop in the default mode.&lt;/blockquote&gt;このメソッドで、３種類の画像（黄→赤→緑）を３秒おきに表示させる。&lt;br&gt;&lt;b&gt;アクセルペダルをタップした時の動作を実装する&lt;/b&gt;事前にフラグを持たせておいて、緑色画像が表示されたらフラグをONにする。また、その時の時刻を取得しておく。&lt;br&gt;次のメソッドを使用して、緑色画像が表示された時刻と、現在時刻の差を取得する。&lt;blockquote&gt;timeIntervalSinceNow&lt;br&gt;Returns the interval between the receiver and the current date and time.&lt;/blockquote&gt;&lt;br&gt;結果をUIAlertView で画面に表示する。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-4649922767215531134?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4649922767215531134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4649922767215531134'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/day6-reaction-time_22.html' title='Day6 Reaction Time（３）信号機画像を追加する'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-7742524161718581767</id><published>2010-09-22T09:56:00.001+09:00</published><updated>2010-09-22T10:02:14.060+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UIView'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>frame と boundsとcenter の関係</title><content type='html'>ビューオブジェクトである、frame,bounds,center は以下のように定義されている。&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;frame（フレーム）プロパティ&lt;/b&gt;は、親ビューの座標系に基づいて、そのビューの&lt;br /&gt;位置とサイズを定義した矩形（フレーム矩形）を表します。&lt;br /&gt;フレーム矩形は、boundsとcenterを使用して計算される便利な値です。これは、ビューの変換が、恒等変換に設定されている場合にのみ有効です。&lt;/blockquote&gt;&lt;blockquote&gt;&lt;b&gt;bounds（境界）プロパティ&lt;/b&gt;は、ビュー固有のローカルな座標系に基づいて、ビューの位置とサイズを定義した矩形（境界矩形）を表します。境界矩形の原点は、通常(0, 0)に設定されますが、必ずしもその必要はありません。&lt;br /&gt;境界矩形は、そのビューのローカルな座標系を表すので、描画やイベント処理のコードの中で、何らかの変化がビュー内のどこで発生したかを知る必要があるときに、最もよく使います。&lt;/blockquote&gt;&lt;blockquote&gt;&lt;b&gt;center（中心）プロパティ&lt;/b&gt;は、フレーム矩形の中心点を表します。&lt;br /&gt;中心点は、ビューの既知の中心点を表すので、ビューの位置を操作するのに最適な方法です。&lt;/blockquote&gt;----------------------------------------&lt;br /&gt;frame と bounds の関係&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_B66rCObfG4g/TJlTsEjVnwI/AAAAAAAAA_o/2wpuoJaB370/s1600/frame_bounds.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="473" src="http://1.bp.blogspot.com/_B66rCObfG4g/TJlTsEjVnwI/AAAAAAAAA_o/2wpuoJaB370/s640/frame_bounds.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_B66rCObfG4g/TJlTymf11bI/AAAAAAAAA_w/jRKqwBHBmgE/s1600/center.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="508" src="http://3.bp.blogspot.com/_B66rCObfG4g/TJlTymf11bI/AAAAAAAAA_w/jRKqwBHBmgE/s640/center.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;参考PDF：&lt;br /&gt;&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/iPhoneAppProgrammingGuide.pdf"&gt;iPhone アプリケーションプログラミングガイド&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2010-winter"&gt;Stanford University / CS 193P iPhone Apprication Development / Title: Lecture #5 - Views, Drawing, Animation&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-7742524161718581767?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/7742524161718581767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/7742524161718581767'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/frame-boundscenter.html' title='frame と boundsとcenter の関係'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_B66rCObfG4g/TJlTsEjVnwI/AAAAAAAAA_o/2wpuoJaB370/s72-c/frame_bounds.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-3046948569958405157</id><published>2010-09-17T21:58:00.000+09:00</published><updated>2010-09-17T21:58:53.874+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UIImage'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='UIImageView'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Day6 Reaction Time（２）view に背景画像を追加する</title><content type='html'>背景画像として、road.png をview に追加する。&lt;br /&gt;road.png をResources フォルダに追加して、以下のように実装した。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;- (void)viewDidLoad {&lt;br /&gt;    [super viewDidLoad];&lt;br /&gt;&lt;br /&gt; UIImage* backgroundImage = [UIImage imageNamed:@"road.png"];&lt;br /&gt; UIImageView* backgroundView = [[UIImageView alloc] initWithImage:backgroundImage];&lt;br /&gt; [backgroundView setFrame:[[UIScreen mainScreen] bounds]];&lt;br /&gt; [self.view addSubview:backgroundView];&lt;br /&gt; &lt;br /&gt; [backgroundView release]; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;参考にしたのは以下の箇所。&lt;br /&gt;&lt;blockquote&gt;How do I create a view for images?&lt;br /&gt;To create a view for images, use the UIImageView class, as shown in Listing 14.&lt;br /&gt;&lt;br /&gt;Listing 14: Creating a view for images&lt;br /&gt;UIImage *image = [UIImage imageNamed:@"image.png"];&lt;br /&gt;UIImageView *theImageView = [[UIImageView alloc] initWithImage:image];&lt;br /&gt;&lt;/blockquote&gt;さらに、UIImageView を setFrame メソッドで画面全体に表示させて、view に追加している。&lt;br /&gt;&lt;br /&gt;参考サイト：&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developer.apple.com/library/ios/#codinghowtos/UserExperience/"&gt;User Experiense Coding How-To's&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-3046948569958405157?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/3046948569958405157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/3046948569958405157'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/day6-reaction-timeview.html' title='Day6 Reaction Time（２）view に背景画像を追加する'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-5102891733914805144</id><published>2010-09-17T21:44:00.000+09:00</published><updated>2010-09-17T21:44:49.197+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Day6 Reaction Time（１）画面構成</title><content type='html'>Reaction Time アプリの内容はこんな感じか。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;アプリの内容&lt;/b&gt;&lt;br /&gt;画面中央に表示されている信号が青に変わったら、右下にあるアクセルペダル画像をタップすると、何ミリ秒で反応したかが表示される。&lt;br /&gt;---------------------------------------&lt;br /&gt;&lt;b&gt;画像の配置&lt;/b&gt;&lt;br /&gt;使用されている画像は次の４つ。&lt;br /&gt;1.&lt;br /&gt;道路（road.png）&lt;br /&gt;背景画像として、view に追加する。&lt;br /&gt;&lt;br /&gt;2-1.&lt;br /&gt;信号機（redLightSmall.png、yellowLightSmall.png、greenLightSmall.png）&lt;br /&gt;３つの画像をランダムに表示させている。&lt;br /&gt;&lt;br /&gt;2-2.&lt;br /&gt;信号機を上部から支えている線（stopLightCable.png）&lt;br /&gt;細部も抜かりありませんね。&lt;br /&gt;&lt;br /&gt;3.&lt;br /&gt;アクセルペダル（gasPedalSmall.png）&lt;br /&gt;コレをタップすると、信号が青に変わってからタップされるまでの経過時間が画面に表示される。&lt;br /&gt;---------------------------------------&lt;br /&gt;&lt;b&gt;Alert メッセージの表示&lt;/b&gt;&lt;br /&gt;次の状態の時、Alert メッセージを表示する。&lt;br /&gt;1.&lt;br /&gt;アプリを起動させた直後&lt;br /&gt;操作方法を説明する。&lt;br /&gt;&lt;br /&gt;2.&lt;br /&gt;信号が青に変わってからペダルをタップした時&lt;br /&gt;信号が青に変わってからタップされるまでの経過時間を表示する。&lt;br /&gt;&lt;br /&gt;3.&lt;br /&gt;信号が赤、または黄色でペダルをタップした時&lt;br /&gt;「青信号でタップしろ」と警告する。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-5102891733914805144?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/5102891733914805144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/5102891733914805144'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/day6-reaction-time.html' title='Day6 Reaction Time（１）画面構成'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-2745231264271904623</id><published>2010-09-16T10:39:00.000+09:00</published><updated>2010-09-16T10:39:12.607+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Day5 Count Me In</title><content type='html'>アプリの内容：&lt;br /&gt;「＋」ボタンと「ー」ボタン、数字が表示されたラベルが用意されている。&lt;br /&gt;１回押すごとにラベルに表示された数字がインクリメント/デクリメントする。&lt;br /&gt;&lt;br /&gt;実装：&lt;br /&gt;View にUIButton とUILabel を追加する。&lt;br /&gt;UILabel に表示する数字をインクリメント/デクリメントするメソッドを実装する。&lt;br /&gt;&lt;br /&gt;ボタンアクション：&lt;br /&gt;addTarget:action:forControlEvents: で、アクションとターゲットを追加する。&lt;br /&gt;&lt;blockquote&gt;addTarget:action:forControlEvents:&lt;br /&gt;Adds a target and action for a particular event (or events) to an internal dispatch table.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Control Events には、様々なイベントが用意されている。&lt;br /&gt;今回の「ボタンを押す」アクションは、「UIControlEventTouchUpInside」を選択する。&lt;br /&gt;&lt;blockquote&gt;UIControlEventTouchUpInside&lt;br /&gt;A touch-up event in the control where the finger is inside the bounds of the control.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;最初、特に理由もなく「UIControlEventAllEvents」を選択していたら、なぜかアクションに指定したメソッドが２回呼ばれてしまった。レファレンスを読むと、&lt;br /&gt;&lt;blockquote&gt;UIControlEventAllEvents&lt;br /&gt;All events, including system events.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;と、あるのでシステムイベントでも呼ばれていたのだと思う。適当に選択するのはやめろ。&lt;br /&gt;&lt;br /&gt;UILabel に表示する数字をインクリメント/デクリメントするメソッド：&lt;br /&gt;&lt;br /&gt;以下のように実装した。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;-(void)addUnit{&lt;br /&gt; NSString* numValue = [[NSString alloc] initWithFormat:@"%d", ++count];&lt;br /&gt;&lt;br /&gt; contLabel.text = numValue;&lt;br /&gt; [numValue release];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;-(void)subtractUnit{&lt;br /&gt; if(count &lt;= 0) return;&lt;br /&gt; NSString* numValue = [[NSString alloc] initWithFormat:@"%d", --count];&lt;br /&gt; &lt;br /&gt; contLabel.text = numValue;&lt;br /&gt; [numValue release];&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;チュートリアルでは、インクリメント/デクリメント演算子が後置されていたが、それではボタンを１回押しただけでは目的が達成されないので前値に直した。&lt;blockquote&gt;インクリメントC言語、C++、Java、JavaScriptなどでは、インクリメント演算子「++」が用意されている。厳密には、前置インクリメントと後置インクリメントの2種類の演算子があり、演算子記号は同じ「++」だがオペランドの前に置くか（例: ++x）後に置くか（例: x++）で区別される。前置インクリメントは式の評価の最初にオペランドがインクリメントされ、後置インクリメントは最後にインクリメントされる。&lt;/blockquote&gt;参考サイト：&lt;a href="http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIControl_Class/Reference/Reference.html"&gt;UIControl Class Refarence　、&lt;/a&gt;&lt;a href="http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%A1%E3%83%B3%E3%83%88"&gt;インクリメント&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-2745231264271904623?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/2745231264271904623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/2745231264271904623'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/day5-count-me-in.html' title='Day5 Count Me In'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-5657620279230217489</id><published>2010-09-14T21:50:00.001+09:00</published><updated>2010-11-10T15:59:09.763+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><category scheme='http://www.blogger.com/atom/ns#' term='shortcuts'/><title type='text'>Xcodeデバッグする時に便利なショートカット</title><content type='html'>デバッグ開始&lt;br /&gt;⌘ + option + return&lt;br /&gt;&lt;br /&gt;デバッグ終了&lt;br /&gt;⌘ + Shift + return&lt;br /&gt;&lt;br /&gt;デバッグからプロジェクトへの切り替え&lt;br /&gt;⌘ + 0&lt;br /&gt;&lt;br /&gt;//挿入&lt;br /&gt;⌘ + /&lt;br /&gt;&lt;br /&gt;ブレークポイント挿入／削除&lt;br /&gt;&lt;br /&gt;⌘ \&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-5657620279230217489?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/5657620279230217489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/5657620279230217489'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/xcode.html' title='Xcodeデバッグする時に便利なショートカット'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-2469170313045584386</id><published>2010-09-10T21:42:00.007+09:00</published><updated>2010-09-12T12:25:41.477+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='UITextField'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Day 3 OpenURL openMaps: カスタマイズ（２）キーボードを表示/非表示にする</title><content type='html'>以下のことを実装したい。&lt;br /&gt;-------------------------&lt;br /&gt;1.&lt;br /&gt;テキストフィールドをタップしたときにキーボードを表示し、ユーザーがキーボードの「Done」ボタンをタップしたときにキーボードを非表示にする。&lt;br /&gt;2.&lt;br /&gt;テキストフィールドの下にある「openMaps」ボタンをタップすると、googleMapsが開き、テキストフィールドに入力した場所の地図が表示される。&lt;br /&gt;-------------------------&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;UITextFieldDelegateプロトコルには、ユーザが「Return」ボタンをタップしたときにテキストフィールドを呼び出す（ボタンに表示されるテキストがどのようなものであっても）、textFieldShouldReturn:メソッドが含まれています。&lt;br /&gt;&lt;br /&gt;textFieldShouldReturn:&lt;br /&gt;Asks the delegate if the text field should process the pressing of the return button.&lt;br /&gt;&lt;br /&gt;View Controllerはテキストフィールドのデリゲートとして設定したため、このメソッドを実装して、resignFirstResponderメッセージを送信する（キーボードを閉じる効果を持つ）ことによって、テキストフィールドからファーストレスポンダステータスを強制的になくすことができます。&lt;br /&gt;&lt;br /&gt;resignFirstResponder&lt;br /&gt;Notifies the receiver that it has been asked to relinquish its status as first responder in its window.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;これを元に実装したソースは以下の通り。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;-(BOOL)textFieldShouldReturn:(UITextField *)tf{&lt;br /&gt;&lt;br /&gt; [tf resignFirstResponder];&lt;br /&gt; &lt;br /&gt; return YES;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;テキストフィールドに入力された文字を openMaps: メソッドに渡し、openURL でgoogleMapsを実行する処理は以下のように実装した。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;-(void)openMaps:(id)sender {&lt;br /&gt;&lt;br /&gt; self.addString = txtField.text;&lt;br /&gt; NSString* addressText =self.addString; &lt;br /&gt; &lt;br /&gt; addressText = [addressText stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];&lt;br /&gt; NSString* urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@",addressText];&lt;br /&gt; &lt;br /&gt; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];&lt;br /&gt; &lt;br /&gt; [addString release];&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;シミュレーターには日本語キーボードがないようなので、日本語入力を試すことが出来なかった。&lt;br /&gt;&lt;br /&gt;参考PDF：&lt;br /&gt;&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/iPhone101.pdf"&gt;iPhone アプリケーション チュートリアル&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-2469170313045584386?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/2469170313045584386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/2469170313045584386'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/appsamuckcom-day-3-openurl-openmaps_6216.html' title='Day 3 OpenURL openMaps: カスタマイズ（２）キーボードを表示/非表示にする'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-5082381114829361155</id><published>2010-09-10T10:34:00.001+09:00</published><updated>2010-09-11T10:28:43.803+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='UITextField'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Day 3 OpenURL openMaps: カスタマイズ（１）住所を直接入力する</title><content type='html'>ボタンをタップして決めうちの住所をgoogleMapsで表示するのではなく、テキストフィールドを実装してキーボードから住所を入力できるようにカスタマイズする。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;UIKitフレームワークには、テキストコンテンツを表示するために、次の3つの主要なクラスがあります。&lt;br /&gt;■ UILabel：静的なテキスト文字列を表示する&lt;br /&gt;■ UITextField：編集可能な単一行のテキストを表示する&lt;br /&gt;■ UITextView：編集可能な複数行のテキストを表示する&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;住所は１行程度の入力になると想定して、UITextFieldクラスを利用する。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;編集可能なText Viewで作業をする場合は、常に、編集セッションを管理するデリゲートオブジェクトを提供する必要があります。&lt;br /&gt;View Controllerは、それ自体がこのテキストフィールドのデリゲートになるため、UITextFieldDelegateプロトコルを採用しなければなりません。クラスがプロトコルを採用することを指定するには、インターフェイスで、そのクラスの継承元のクラスの名前の後に、角括弧（&lt;&gt;）で囲んでプロトコル名を追加します。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;TextField を実装するソースコードは以下のようにした。&lt;br /&gt;&lt;br /&gt;インターフェイスで、デリゲートを設定する。&lt;br /&gt;RootViewController.h&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;#import &amp;lt;UIKit/UIKit.h&amp;gt;&lt;br /&gt;&lt;br /&gt;@interface RootViewController : UIViewController &amp;lt;UITextFieldDelegate&amp;gt; {&lt;br /&gt; UIView *view;&lt;br /&gt; UITextField *txtField;&lt;br /&gt;}&lt;br /&gt;@end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;TextField の実装は、loadView メソッドで行う。&lt;br /&gt;デフォルトの画面 UIView に、テキストフィールドのビュー UITxetField を追加する。&lt;br /&gt;&lt;br /&gt;RootViewController.m&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;-(void)loadView{&lt;br /&gt; &lt;br /&gt; view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];&lt;br /&gt; view.backgroundColor = [UIColor grayColor];&lt;br /&gt; self.view = view;&lt;br /&gt;&lt;br /&gt; txtField = [[UITextField alloc] initWithFrame:CGRectMake(63, 56, 200, 30)];&lt;br /&gt; txtField.borderStyle = 3;&lt;br /&gt; txtField.placeholder = @"Enter Adress";&lt;br /&gt; [self.view addSubview: txtField];&lt;br /&gt; txtField.delegate = self;&lt;br /&gt; txtField.returnKeyType = UIReturnKeyDone;&lt;br /&gt;&lt;br /&gt; [txtField release];&lt;br /&gt; [view release];&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;参考PDF：&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/iPhoneAppProgrammingGuide.pdf"&gt;iPhone アプリケーションプログラミングガイド&lt;/a&gt;&lt;br /&gt;&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/iPhone101.pdf"&gt;iPhone アプリケーション チュートリアル&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-5082381114829361155?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/5082381114829361155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/5082381114829361155'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/appsamuckcom-day-3-openurl-openmaps_10.html' title='Day 3 OpenURL openMaps: カスタマイズ（１）住所を直接入力する'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-375108974368987108</id><published>2010-09-07T15:57:00.002+09:00</published><updated>2010-09-11T10:28:43.807+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='NSString'/><title type='text'>Day 3 OpenURL openMaps: メソッド詳細（２）</title><content type='html'>元の実装では、決め打ちで住所を指定していた（米国appleの住所、アルファベットと数字）。コレを日本語で指定したい（日本apple本社の住所）場合はstringWithCString:encoding: メソッドを使用する。&lt;br /&gt;&lt;blockquote&gt;stringWithCString:encoding:&lt;br /&gt;Returns a string containing the bytes in a given C array, interpreted according to a given encoding.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;C言語の文字列からNSStringを返すメソッド。文字列は「" "」で囲む。エンコーディングの引数は「NSUTF8StringEncoding」を指定する。&lt;br /&gt;日本語住所を指定する場合のソースは以下のようになる。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;-(void)openMaps:(id)sender{&lt;br /&gt; NSString* addressText =[NSString stringWithCString:"東京都新宿区西新宿3-20-2" encoding:NSUTF8StringEncoding]; &lt;br /&gt;&lt;br /&gt; addressText = [addressText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];&lt;br /&gt; &lt;br /&gt; NSString* urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@",addressText];&lt;br /&gt; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-375108974368987108?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/375108974368987108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/375108974368987108'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/appsamuckcom-day-3-openurl-openmaps_07.html' title='Day 3 OpenURL openMaps: メソッド詳細（２）'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-8151449297999952398</id><published>2010-09-07T14:50:00.004+09:00</published><updated>2010-09-11T10:28:43.810+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Day 3 OpenURL openMaps: メソッド詳細（１）</title><content type='html'>openMaps ボダンをクリックすると実行される処理の内容を説明する。&lt;br /&gt;&lt;br /&gt;ソースコードは以下の通り。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;-(void)openMaps:(id)sender{&lt;br /&gt; NSString* addressText = @"1 Infinite Loop, Cupertino, CA 95014";&lt;br /&gt;&lt;br /&gt; addressText = [addressText stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];&lt;br /&gt; &lt;br /&gt; NSString* urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@",addressText];&lt;br /&gt; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;４行目&lt;br /&gt;決め打ちの住所（米国appleの住所）をstringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding メソッドでエンコードする。&lt;br /&gt;６行目&lt;br /&gt;stringWithFormat メソッドで、文字列（googleMap検索のURL）を作る。&lt;br /&gt;７行目&lt;br /&gt;URLWithString メソッドで、NSURLを作成する。そのNSURL を利用してgoogleMapでその住所を表示する。&lt;br /&gt;&lt;br /&gt;６行目補足&lt;br /&gt;作成する文字列は、googleMapで検索した結果を表示するURL&lt;br /&gt;&lt;br /&gt;７行目補足&lt;br /&gt;sharedApplicationメソッドでインスタンスを取得して、openURL メソッドでアプリケーション（googleMaps）にアクセスする。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-8151449297999952398?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/8151449297999952398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/8151449297999952398'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/appsamuckcom-day-3-openurl-openmaps.html' title='Day 3 OpenURL openMaps: メソッド詳細（１）'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-5850348379655913374</id><published>2010-09-06T16:11:00.004+09:00</published><updated>2010-09-11T10:28:43.813+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Day 3 OpenURL ローカル環境で実行してみる</title><content type='html'>アプリを実行してみると以下の５つのボタンが並んでいる。&lt;br /&gt;　Open phone URL&lt;br /&gt;　Open SMS URL&lt;br /&gt;　Open E-mail URL&lt;br /&gt;　Open Map URL&lt;br /&gt;　Open Browser URL&lt;br /&gt;&lt;br /&gt;ソースコードを見ると、ボタンをタップして実行されるコードを書いているのは「Open Map URL」だけなのでそこだけ実装してみる。&lt;br /&gt;ここで使われているのはカスタムURLと言われるもの。iPhoneAppProgramingGuide.pdf より引用。&lt;br /&gt;&lt;blockquote&gt;アプリケーションが既知の型のURLを扱う場合は、そのURLスキームを使用してそのアプリケーションとやり取りができます。&lt;br /&gt;&lt;/blockquote&gt;使うメソッドは、openURL:メソッド。&lt;br /&gt;詳細は以降。&lt;br /&gt;&lt;br /&gt;参考PDF：&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/iPhoneAppProgrammingGuide.pdf"&gt;iPhone アプリケーションプログラミングガイド 他のアプリケーションとのやり取り&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-5850348379655913374?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kyykblog.blogspot.com/feeds/5850348379655913374/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kyykblog.blogspot.com/2010/09/appsamuckcom-day-3-openurl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/5850348379655913374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/5850348379655913374'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/appsamuckcom-day-3-openurl.html' title='Day 3 OpenURL ローカル環境で実行してみる'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-8847816022264244517</id><published>2010-09-03T21:30:00.002+09:00</published><updated>2010-09-03T21:30:48.209+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><category scheme='http://www.blogger.com/atom/ns#' term='shortcuts'/><title type='text'>定義へジャンプ</title><content type='html'>定義へジャンプするショートカット&lt;br /&gt;&lt;br /&gt;⌘ + ダブルクリック&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-8847816022264244517?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/8847816022264244517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/8847816022264244517'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/blog-post_03.html' title='定義へジャンプ'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-7772852467712548231</id><published>2010-09-03T21:29:00.001+09:00</published><updated>2010-11-10T16:02:06.224+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><category scheme='http://www.blogger.com/atom/ns#' term='shortcuts'/><title type='text'>*.hファイルと*.mファイルの切り替え</title><content type='html'>*.hファイルと*.mファイルの切り替えを行うショートカット&lt;br /&gt;&lt;br /&gt;⌘ + option +↑&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-7772852467712548231?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/7772852467712548231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/7772852467712548231'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/hm.html' title='*.hファイルと*.mファイルの切り替え'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-6303771527688202255</id><published>2010-09-01T16:03:00.002+09:00</published><updated>2010-09-11T10:28:43.816+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='UIImageView'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Day 2 画像をアニメーション表示させる</title><content type='html'>UIImageViewクラスを利用して画像をアニメーション表示させる。&lt;br /&gt;viewDidLoadに以下で実装した処理を追加する。&lt;br /&gt;実装手順は以下の通り。&lt;br /&gt;&lt;br /&gt;1.&lt;br /&gt;animationImagesプロパティに、アニメーションで使われる画像を格納した配列を指定する。最後に nil を入れるのを忘れない。&lt;br /&gt;&lt;br /&gt;2.&lt;br /&gt;アニメーションの設定を下記のプロパティで指定する。&lt;br /&gt;animationDurationプロパティで、アニメーションの時間を指定する。&lt;br /&gt;animationRepeatCountプロパティで、アニメーションを繰り返す回数を指定する。&lt;br /&gt;&lt;br /&gt;3.&lt;br /&gt;startAnimatingメソッドで、アニメーションを開始する。&lt;br /&gt;&lt;br /&gt;4.&lt;br /&gt;現在のviewにUIImageViewを追加する。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-6303771527688202255?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/6303771527688202255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/6303771527688202255'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/appsamuckcom-day-2.html' title='Day 2 画像をアニメーション表示させる'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-7990075405033692821</id><published>2010-09-01T10:32:00.000+09:00</published><updated>2010-09-01T10:32:25.601+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UINavigationController'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>Navigation Controller</title><content type='html'>&lt;blockquote&gt;Navigation Controllerは、階層的に構成されたデータを表示するために使用するコンテナView Controllerです。&lt;br /&gt;このクラスのメソッドは、カスタムView Controllerのコレクションをスタックベースで管理する機能をサポートしています。このスタックは、階層的なデータの中をユーザが通った経路を反映します。スタックの一番下は出発点を表し、スタックの一番上はデータ内のユーザの現在位置を表します。&lt;br /&gt;Navigation ControllerはNavigation Barを1つ管理します。Navigation Barには、データ階層内のユーザの現在位置についての情報、前の画面に戻るためのボタン、および現在のView Controllerで必要なカスタムコントロールが表示されます。また、現在の画面に関連するコマンドを表示するために使うオプションツールバーの管理も行います。&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-7990075405033692821?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/7990075405033692821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/7990075405033692821'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/navigation-controller.html' title='Navigation Controller'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-9006676569005408373</id><published>2010-09-01T10:28:00.006+09:00</published><updated>2010-09-11T10:28:43.819+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='modal'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Day 2 modalビューを表示させる</title><content type='html'>modalビューを表示させるために、mainviewの右下隅にあるinfoボタンを実装する。&lt;br /&gt;参考にしたのは参照PDFの「モーダルモードでのNavigationControllerの表示」。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;-(void)showInfo:(id)sender{&lt;br /&gt;&lt;br /&gt; RootViewController *rootView = [[RootViewController alloc] init]; &lt;br /&gt; FlipsideViewController *modalview = [[FlipsideViewController alloc] init];&lt;br /&gt; modalview.delegate = self;&lt;br /&gt; modalview.view.backgroundColor = [UIColor greenColor];&lt;br /&gt; &lt;br /&gt; UINavigationController *naviModalController = [[UINavigationController alloc] initWithRootViewController:rootView];&lt;br /&gt;&lt;br /&gt; modalview.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; &lt;br /&gt; [naviModalController pushViewController:modalview animated:NO];&lt;br /&gt; [self presentModalViewController:naviModalController animated:YES];&lt;br /&gt; &lt;br /&gt; [rootView release];&lt;br /&gt; [modalview release];&lt;br /&gt; [naviModalController release]; &lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;５行目&lt;br /&gt;delegateプロパティを設定して、modalを閉じるメソッドをデリゲーションするときに使用する。&lt;br /&gt;&lt;br /&gt;参考PDF：&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/ViewControllerPGforiPhoneOS.pdf"&gt;iPhone OS View Controller プログラミングガイド&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-9006676569005408373?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/9006676569005408373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/9006676569005408373'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/modal.html' title='Day 2 modalビューを表示させる'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-6277453082787387803</id><published>2010-09-01T10:00:00.000+09:00</published><updated>2010-09-01T10:00:21.646+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><title type='text'>イメージファイルの追加</title><content type='html'>xcodeのプロジェクトにイメージファイルを追加する方法。&lt;br /&gt;&lt;br /&gt;1.&lt;br /&gt;（プロジェクト名）フォルダ - Resourcesフォルダ下にimagesフォルダを追加する。&lt;br /&gt;2.&lt;br /&gt;imagesフォルダに既存ファイルとして、イメージファイルを追加する。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-6277453082787387803?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/6277453082787387803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/6277453082787387803'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/09/blog-post.html' title='イメージファイルの追加'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-7056947914429230016</id><published>2010-08-31T16:20:00.001+09:00</published><updated>2010-08-31T16:20:44.569+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='modal'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>モーダルView Controllerを閉じる</title><content type='html'>&lt;blockquote&gt;そのモーダルView Controllerを表示したのと同じView Controllerが閉じるべきなのです。親のView Controllerに、モーダルモードで表示した子を閉じるように通知するにはいくつかの方法がありますが、よく使われる方法はデリゲーションです。&lt;/blockquote&gt;&lt;br /&gt;参考PDF：&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/ViewControllerPGforiPhoneOS.pdf"&gt;iPhone OS View Controller プログラミングガイド&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-7056947914429230016?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/7056947914429230016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/7056947914429230016'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/08/view-controller.html' title='モーダルView Controllerを閉じる'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-5674069214655357156</id><published>2010-08-31T16:10:00.005+09:00</published><updated>2010-09-11T10:28:43.821+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Day 2 View-basedAppricationテンプレートを使用する</title><content type='html'>appsamuck.com の実装は古い環境で構築されているため、iphoneSDK3.xで実装してみる。&lt;br /&gt;その準備は以下の通り。&lt;br /&gt;&lt;br /&gt;使用テンプレート：&lt;br /&gt;View-BasedApprication&lt;br /&gt;くるっと回転するビュー（modalView）の実装はWindow-basedAppricationテンプレートなるものが用意されているが、IBを使用しないで実装していくのでこちらを元にしていく。&lt;br /&gt;IBを使用しないための準備は、&lt;a href="http://kyykblog.blogspot.com/search/label/notIB"&gt;ラベル：noIB&lt;/a&gt;を参照する。&lt;br /&gt;&lt;br /&gt;デリゲーション：&lt;br /&gt;さらにmodalViewは、デリゲーションを使用するようにと書かれているので 、Window-basedAppricationテンプレートを参考にデリゲートを実装する。&lt;br /&gt;&lt;br /&gt;参考PDF：&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/ViewControllerPGforiPhoneOS.pdf"&gt;iPhone OS View Controller プログラミングガイド&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-5674069214655357156?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kyykblog.blogspot.com/feeds/5674069214655357156/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kyykblog.blogspot.com/2010/08/appsamuckcom-day-2-view.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/5674069214655357156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/5674069214655357156'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/08/appsamuckcom-day-2-view.html' title='Day 2 View-basedAppricationテンプレートを使用する'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-4068907258373080887</id><published>2010-08-31T15:32:00.000+09:00</published><updated>2010-08-31T15:32:38.750+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UIViewController'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>viewDidLoad メソッド</title><content type='html'>viewDidLoad&lt;br /&gt;&lt;br /&gt;Managing the View&lt;br /&gt;-viewDidLoad&lt;br /&gt;Called after the controller’s view is loaded into memory.&lt;br /&gt;------------------&lt;br /&gt;ビューはメモリー上に展開されただけで、表示はされていない。なので、ここでmodalviewは動かない。&lt;br /&gt;&lt;br /&gt;参考URL：&lt;a href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/viewDidLoad"&gt;iOS Reference Library UIViewController Class Reference&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-4068907258373080887?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4068907258373080887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4068907258373080887'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/08/viewdidload.html' title='viewDidLoad メソッド'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-4927313409079940776</id><published>2010-08-31T15:07:00.001+09:00</published><updated>2010-08-31T15:15:36.379+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UIViewController'/><category scheme='http://www.blogger.com/atom/ns#' term='notIB'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><category scheme='http://www.blogger.com/atom/ns#' term='UIWindow'/><title type='text'>IBを使わない場合のviewとviewControllerの作成</title><content type='html'>View-basedApricationテンプレートを使用する場合、viewとviewControllerを自作する必要がある。&lt;br /&gt;&lt;br /&gt;1.&lt;br /&gt;(プロジェクト名)AppDelegate.mファイルの、application:didFinishLaunchingWithOptionsメソッドで、UIWindowとUIViewControllerを作成してUIWindowに追加する。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    &lt;br /&gt;    &lt;br /&gt;    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];&lt;br /&gt; viewController = [[RootViewController alloc] init];&lt;br /&gt; navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];&lt;br /&gt; &lt;br /&gt; [window addSubview:navigationController.view];&lt;br /&gt;    [window makeKeyAndVisible];&lt;br /&gt;     &lt;br /&gt; return YES;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2.&lt;br /&gt;UIViewCOntrollerクラスのloadViewをオーバーライドして、self.viewにviewを追加する。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;-(void)loadView{&lt;br /&gt; CGRect bounds = [[UIScreen mainScreen] applicationFrame]; &lt;br /&gt; view = [[UIView alloc] initWithFrame:bounds];&lt;br /&gt;&lt;br /&gt; view.backgroundColor = [UIColor redColor];&lt;br /&gt; self.view = view;&lt;br /&gt; &lt;br /&gt; [view release];&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;参考PDF：&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/ViewControllerPGforiPhoneOS.pdf"&gt;iPhone OS View Controller プログラミングガイド プログラムによるビューの作成&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-4927313409079940776?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4927313409079940776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4927313409079940776'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/08/ibviewviewcontroller.html' title='IBを使わない場合のviewとviewControllerの作成'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-4760461101331086981</id><published>2010-08-31T14:38:00.001+09:00</published><updated>2010-08-31T14:40:03.602+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UIViewController'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>ViewControllerのロードサイクル(2)</title><content type='html'>&lt;a href="http://kyykblog.blogspot.com/2010/08/viewcontroller.html"&gt;ViewControllerのロードサイクル(1)&lt;/a&gt;の続き&lt;br /&gt;&lt;br /&gt;loadView&lt;br /&gt;↓&lt;br /&gt;viewDidLoad&lt;br /&gt;↓&lt;br /&gt;viewWillAppear&lt;br /&gt;↓&lt;br /&gt;viewDidAppear&lt;br /&gt;&lt;br /&gt;------------------------------&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_B66rCObfG4g/THyU-UD3BVI/AAAAAAAAA-s/wkF6gwBH8-A/s1600/%E3%83%93%E3%83%A5%E3%83%BC%E3%81%AE%E8%A1%A8%E7%A4%BA%E3%81%AB%E5%BF%9C%E7%AD%94%E3%81%99%E3%82%8B.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://3.bp.blogspot.com/_B66rCObfG4g/THyU-UD3BVI/AAAAAAAAA-s/wkF6gwBH8-A/s320/%E3%83%93%E3%83%A5%E3%83%BC%E3%81%AE%E8%A1%A8%E7%A4%BA%E3%81%AB%E5%BF%9C%E7%AD%94%E3%81%99%E3%82%8B.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;参考PDF：&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/ViewControllerPGforiPhoneOS.pdf"&gt;iPhone OS View Controller プログラミングガイド&lt;/a&gt;&lt;br /&gt;&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/iPhoneAppProgrammingGuide.pdf"&gt;iPhone アプリケーションプログラミングガイド&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-4760461101331086981?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4760461101331086981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4760461101331086981'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/08/viewcontroller2.html' title='ViewControllerのロードサイクル(2)'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_B66rCObfG4g/THyU-UD3BVI/AAAAAAAAA-s/wkF6gwBH8-A/s72-c/%E3%83%93%E3%83%A5%E3%83%BC%E3%81%AE%E8%A1%A8%E7%A4%BA%E3%81%AB%E5%BF%9C%E7%AD%94%E3%81%99%E3%82%8B.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-7913129035239276200</id><published>2010-08-26T21:25:00.000+09:00</published><updated>2010-08-26T21:25:05.051+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='modal'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>モーダルビューコントローラ</title><content type='html'>&lt;blockquote&gt;モーダルView Controllerは、新規に1画面分のコンテンツを表示するときに自由に使えるツールです。&lt;br /&gt;モーダルView Controllerは、UITabBarControllerやUINavigationControllerのように、&lt;br /&gt;UIViewControllerの特定のサブクラスではありません。&lt;br /&gt;アプリケーションでモーダルView Controllerを使用する理由としては、... 何らかの情報を収集したり表示したりするために、アプリケーションのワークフローに一時的に割り込みを行うことを意味しています。&lt;br /&gt;&lt;/blockquote&gt;参考PDF：&lt;br /&gt;&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/ViewControllerPGforiPhoneOS.pdf"&gt;iPhone OS View Controller プログラミングガイド&lt;/a&gt;&lt;br /&gt;&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/iPhoneAppProgrammingGuide.pdf"&gt;iPhone アプリケーションプログラミングガイド&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-7913129035239276200?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/7913129035239276200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/7913129035239276200'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/08/blog-post.html' title='モーダルビューコントローラ'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-4616116748152319471</id><published>2010-08-25T16:28:00.005+09:00</published><updated>2010-08-31T14:36:12.722+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UIViewController'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>ViewControllerのロードサイクル(1)</title><content type='html'>loadView&lt;br /&gt;↓&lt;br /&gt;viewDidLoad&lt;br /&gt;↓&lt;br /&gt;viewWillAppear&lt;br /&gt;↓&lt;br /&gt;viewDidAppear&lt;br /&gt;&lt;br /&gt;------------------------------&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_B66rCObfG4g/THUPXqGUOFI/AAAAAAAAA-c/kUsscsP2Xec/s1600/%E3%83%AD%E3%83%BC%E3%83%89%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AB.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="332" src="http://2.bp.blogspot.com/_B66rCObfG4g/THUPXqGUOFI/AAAAAAAAA-c/kUsscsP2Xec/s400/%E3%83%AD%E3%83%BC%E3%83%89%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AB.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-4616116748152319471?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4616116748152319471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4616116748152319471'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/08/viewcontroller.html' title='ViewControllerのロードサイクル(1)'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_B66rCObfG4g/THUPXqGUOFI/AAAAAAAAA-c/kUsscsP2Xec/s72-c/%E3%83%AD%E3%83%BC%E3%83%89%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AB.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-1661511268303098584</id><published>2010-08-25T15:59:00.002+09:00</published><updated>2010-08-26T21:24:47.563+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='UIWindow'/><title type='text'>UIWindowの作成</title><content type='html'>&lt;blockquote&gt;ウインドウの最初のフレームサイズは、必ず画面全体を覆うように設定するべきです。&lt;br /&gt;プログラミングによってウインドウを作成する場合は、作成時に望みのフレーム矩形を明示的に渡渡さなければなりません。画面の矩形と異なる矩形は渡さないでください。画面の矩形は、UIScreenオブジェクトから次のようにして取得できます。&lt;br /&gt;&lt;/blockquote&gt;&lt;pre class="prettyprint linenums:1"&gt;UIWindow* aWindow = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen]bounds]] autorelease];&lt;br /&gt;&lt;/pre&gt;参考PDF：&lt;br /&gt;&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/ViewControllerPGforiPhoneOS.pdf"&gt;iPhone OS View Controller プログラミングガイド&lt;/a&gt;&lt;br /&gt;&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/iPhoneAppProgrammingGuide.pdf"&gt;iPhone アプリケーションプログラミングガイド&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-1661511268303098584?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kyykblog.blogspot.com/feeds/1661511268303098584/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kyykblog.blogspot.com/2010/08/uiwindow.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/1661511268303098584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/1661511268303098584'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/08/uiwindow.html' title='UIWindowの作成'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-7915273518165551380</id><published>2010-08-25T15:53:00.001+09:00</published><updated>2010-08-26T21:24:24.027+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>UIViewとUIWindowとUIViewController</title><content type='html'>UIView&lt;br /&gt;&lt;blockquote&gt;画面上の矩形領域を定義します。&lt;br /&gt;その矩形領域内にコンテンツを表示する責務（コンテンツ表示）と、その領域内で発生したタッチイベントに応答する責務（イベント処理）を負っています。&lt;br /&gt;1つ以上のサブビューを管理できます。&lt;br /&gt;&lt;/blockquote&gt;UIWindow&lt;br /&gt;&lt;blockquote&gt;iPhoneアプリケーションは、通常、UIWindowクラスのインスタンスで表わされるウインドウを1つだけ持っています。&lt;br /&gt;1つ以上のビューをそこに追加して表示します。その後は、このウインドウオブジェクトを再び参照することはほとんどありません。&lt;br /&gt;UIWindowの親クラスはUIViewなので、通常はUIWindowオブジェクトのビュー関連プロパティを直接操作することはありません。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;UIViewController&lt;br /&gt;&lt;blockquote&gt;1つの画面のビューは、1つのView Controllerオブジェクトによって支えられています。&lt;br /&gt;（View Controllerの仕事は、）ビューに表示するデータを管理することと、更新をアプリケーションのほかの部分と調整することです。&lt;br /&gt;自身が管理する一連のビューを作成したり、メモリ不足状態のときにビューをメモリから削除する責務を負っています。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;参考PDF：&lt;br /&gt;&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/ViewControllerPGforiPhoneOS.pdf"&gt;iPhone OS View Controller プログラミングガイド&lt;/a&gt;&lt;br /&gt;&lt;a href="http://developer.apple.com/jp/iphone/library/documentation/iPhoneAppProgrammingGuide.pdf"&gt;iPhone アプリケーションプログラミングガイド&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-7915273518165551380?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/7915273518165551380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/7915273518165551380'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/08/uiviewuiwindowuiviewcontroller.html' title='UIViewとUIWindowとUIViewController'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-8298597504081848778</id><published>2010-08-17T10:09:00.006+09:00</published><updated>2010-09-11T10:26:36.936+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='notIB'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><title type='text'>InterfaceBuilder(IB)を使わないための準備</title><content type='html'>Xcodeで、IBを使わないためには以下の処理を事前に行う。&lt;br /&gt;------------------------------&lt;br /&gt;&lt;br /&gt;Window-based Applicationテンプレートを選択する。&lt;br /&gt;&lt;br /&gt;*.xibファイルを削除する（一緒にゴミ箱に入れる）。&lt;br /&gt;&lt;br /&gt;main.mの１４行目を以下のように変更する。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;int retVal = UIApplicationMain(argc, argv, nil, nil);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;最後の引数を「nil」から「AppDelegateクラス名」に変更する。&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;int retVal = UIApplicationMain(argc, argv, nil, @"bonefire_3_xAppDelegate");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;bonefire_3_x-Info.plistファイルのMain nib file base nameを削除する。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-8298597504081848778?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/8298597504081848778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/8298597504081848778'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/08/interfacebuilder_17.html' title='InterfaceBuilder(IB)を使わないための準備'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-7817207925598222656</id><published>2010-08-05T10:23:00.003+09:00</published><updated>2010-09-11T10:28:43.824+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Day 2 Utility Applicationテンプレートのソースコード解析</title><content type='html'>新規プロジェクトを作成して、そのままビルドと実行を行うと、「i」ボタンが用意されている。押すとくるっと画面が回り「Done」ボタンと、ナビゲーションバーが表示される。「Done」ボタンを押すと元の画面に戻る。&lt;br /&gt;IBを起動してみる。どうやら「i」ボタンはButtonアクションの設定を行っている訳ではないらしい。くるっとする動きは、showInfoで実装しているっぽい。&lt;br /&gt;@protocolやら、objective-cを理解していないとむずかしい。。。&lt;br /&gt;&lt;br /&gt;以下、理解したことのメモ。&lt;br /&gt;------------------------------------&lt;br /&gt;&lt;b&gt;MainViewController.m&lt;/b&gt;&lt;br /&gt;MainViewController.m→@protocol FlipsideViewControllerDelegateの実装&lt;br /&gt;23-26&lt;br /&gt;flipsideViewControllerDidFinishメソッド&lt;br /&gt;25&lt;br /&gt;dismissModalViewControllerAnimatedメソッドを実行する。&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;そのView Controllerと、その上にあるすべてのView Controllerが閉じられる。通常これは、その下にあるNavigation Controllerに戻るために行う。&lt;br /&gt;&lt;br /&gt;29-38&lt;br /&gt;showInfoメソッド&lt;br /&gt;MainView.xibで、Viewウィンドウの右下にある「i」ボタンに紐づいている処理。&lt;br /&gt;32&lt;br /&gt;controller.delegate = self;&lt;br /&gt;「i」ボタンが押されると、delegate（移譲先）先としてself指定する。&lt;br /&gt;&lt;br /&gt;34&lt;br /&gt;controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;&lt;br /&gt;コントローラのアニメーションの種類を、水平方向にパネルが回転するようなアニメーションで指定する。&lt;br /&gt;&lt;br /&gt;35&lt;br /&gt;[self presentModalViewController:controller animated:YES];&lt;br /&gt;指定したcontrollerを一番上に表示する。&lt;br /&gt;------------------------------------&lt;br /&gt;&lt;b&gt;FlipsideViewController.h&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;23-25&lt;br /&gt;@protocol FlipsideViewControllerDelegate;&lt;br /&gt;protocolの宣言&lt;br /&gt;- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;の定義を行う。実装は、MainViewController.m23-26&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-7817207925598222656?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/7817207925598222656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/7817207925598222656'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/08/appsamuckcom-day-2-utility-application.html' title='Day 2 Utility Applicationテンプレートのソースコード解析'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-2320318025990282106</id><published>2010-08-04T09:12:00.004+09:00</published><updated>2010-09-11T10:28:43.826+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Day 2 Campfire ローカル環境で実行してみる</title><content type='html'>Day 1 のように解説がある訳ではないらしい。とりあえず、ソースをダンロードして解析してみる。&lt;br /&gt;いつものように、シミュレータのバージョンを変更する。warningが１つ出るが、実行は出来た。&lt;br /&gt;キャンプファイヤーがめらめらしている画像が表示される。右下の「i」ボタンを押すと、くるっと画面が回転する。今度は右上の「Done」ボタンを押すとキャンプファイヤーの画面に戻る。&lt;br /&gt;&lt;br /&gt;こういった動作をするアプリをUtilityアプリケーションと言うらしく、テンプレートも用意されている。と、言う訳でDay 2 はUtilityアプリケーションの作成らしい。&lt;br /&gt;しかし、xcode3.xになって、Utility Applicationテンプレートの内容が変わった。&lt;br /&gt;なので、新しいテンプレートに合わせてDay2を作り直してみる。&lt;br /&gt;次回から、新しいUtility Applicationテンプレートのソースコードを解析してみる。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-2320318025990282106?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/2320318025990282106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/2320318025990282106'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/08/appsamuckcom-day-2.html' title='Day 2 Campfire ローカル環境で実行してみる'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-4874385563837146363</id><published>2010-08-03T15:13:00.004+09:00</published><updated>2010-09-11T10:28:43.832+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Day 1 解説を読んでつまずいた箇所まとめ</title><content type='html'>つまずいたその１&lt;br /&gt;InterFace Builderの使い方が解らなくて説明についていけなかったのは、以下の３箇所。内容の概略を以下にメモする。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;We need to reference the label in our code so we can update the label&lt;/b&gt;&lt;/blockquote&gt;Interfacce Builder(IB)を使って、labelを追加する所で、Xcodeのバージョンアップにより説明のようには"Class Outlets"がなかった。&lt;br /&gt;&lt;br /&gt;xcode3では、ライブラリウィンドウに移っていた。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_B66rCObfG4g/TFeyOAbA5vI/AAAAAAAAA9Y/uwBWpwblFpg/s1600/Outlets.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_B66rCObfG4g/TFeyOAbA5vI/AAAAAAAAA9Y/uwBWpwblFpg/s320/Outlets.png" width="130" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--------------------------&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Now we need to update our class file&lt;/b&gt;&lt;/blockquote&gt;Outletsを追加したので、クラスファイルを更新する。既にファイルを更新していた場合、上書きされてしまうのでFileMergeでMergeする。&lt;br /&gt;--------------------------&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Now we need to wire up the Label in Interface Builder to the UILabel in the class file&lt;/b&gt;&lt;/blockquote&gt;Interface Builderを使って、countdownLabelとFile's Ownerを接続する。&lt;br /&gt;&lt;br /&gt;つまづいたその２&lt;br /&gt;File'sOwnerとは、そもそもなんなのか？調べた。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_B66rCObfG4g/TFex23SiKNI/AAAAAAAAA9Q/Z8A21An3Ofc/s1600/file%27sowner.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/_B66rCObfG4g/TFex23SiKNI/AAAAAAAAA9Q/Z8A21An3Ofc/s320/file%27sowner.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Name→File's Owner&lt;br /&gt;Type→MinutesToMidnightViewController&lt;br /&gt;自動生成されたMinutesToMidnightViewControllerクラス。&lt;br /&gt;MinutesToMidnightViewController.xibの持ち主がMinutesToMidnightViewControllerクラスである。&lt;br /&gt;&lt;br /&gt;Name→View&lt;br /&gt;Type→UIView&lt;br /&gt;MinutesToMidnightViewControllerクラスのインスタンス変数View&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;つまづいたその３&lt;br /&gt;各処理について簡単にしか説明がなかったので、より詳しく、どんな処理をしているのか調べた。&lt;br /&gt;&lt;br /&gt;MinutesToMidnightAppDelegate.m&lt;br /&gt;インスタンスメソッド&lt;br /&gt;applicationDidFinishLaunching&lt;br /&gt;処理内容は３つ&lt;br /&gt;NSTimerクラスのscheduledTimerWithTimeIntervalで、１秒ごとに処理を行う。今回は、現在時刻の表示。&lt;br /&gt;UIWindowクラスのaddSubviewで、ウィンドウの中にviewを渡す。&lt;br /&gt;UIWindowクラスのmakeKeyAndVisibleで、キーウィンドウを作成する。&lt;br /&gt;&lt;br /&gt;インスタンスメソッド&lt;br /&gt;applicationWillTerminate&lt;br /&gt;アプリが終了するときに呼ばれる&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-4874385563837146363?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4874385563837146363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4874385563837146363'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/08/appsamuckcom-day-1.html' title='Day 1 解説を読んでつまずいた箇所まとめ'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_B66rCObfG4g/TFeyOAbA5vI/AAAAAAAAA9Y/uwBWpwblFpg/s72-c/Outlets.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-4443251272998846791</id><published>2010-07-27T15:20:00.065+09:00</published><updated>2010-09-11T10:28:43.836+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Day 1 エラーの原因と正しい処理の内容</title><content type='html'>updateLabelクラスを、beforeからafterに書き換えたところ、エラーがなくなりシミュレータが動いた。&lt;br /&gt;&lt;br /&gt;before&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;-(void)updateLabel {&lt;br /&gt; NSDate* now = [NSDate date];&lt;br /&gt; int hour = 23 - [[now dateWithCalendarFormat:nil timeZone:nil] hourOfDay];&lt;br /&gt; int min = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] minuteOfHour];&lt;br /&gt; int sec = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] secondOfMinute];&lt;br /&gt; countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, min,sec];&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;updateLabelクラスでは、ラベルに表示する時刻を生成している。&lt;br /&gt;beforeでエラーが出るのは次の３行。&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;span class="nocode"&gt;1: &lt;/span&gt;int hour = 23 - [[now dateWithCalendarFormat:nil timeZone:nil] hourOfDay];&lt;br /&gt;&lt;span class="nocode"&gt;2: &lt;/span&gt;int min = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] minuteOfHour];&lt;br /&gt;&lt;span class="nocode"&gt;3: &lt;/span&gt;int sec = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] secondOfMinute];&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;after&lt;br /&gt;&lt;pre class="prettyprint linenums:1"&gt;-(void)updateLabel {&lt;br /&gt;NSDate* now = [NSDate date];&lt;br /&gt; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];&lt;br /&gt; NSDateComponents *dateComponents = [gregorian components:(NSHourCalendarUnit  | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:now];&lt;br /&gt; NSInteger hour = [dateComponents hour];&lt;br /&gt; NSInteger minute = [dateComponents minute];&lt;br /&gt; NSInteger second = [dateComponents second];&lt;br /&gt; [gregorian release];&lt;br /&gt; countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, minute, second];&lt;br /&gt;}  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;正しく動作する、updateLabelクラスの主な処理は以下の通り。&lt;br /&gt;---------------------------&lt;br /&gt;NSDate* now = [NSDate date];&lt;br /&gt;NSDateクラスブジェクトを生成する&lt;br /&gt;dateメソッドで、現在の日時（経過時間）を取得する&lt;br /&gt;&lt;br /&gt;NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];&lt;br /&gt;NSCalendarクラスオブジェクトの生成と初期化を行う&lt;br /&gt;initWithCalendarIdentifierメソッドは、NSString型の引数をとる。&lt;br /&gt;引数は、NSLocaleクラスのNSLocale Calendar Keysで定義されている。&lt;br /&gt;NSGregorianCalendarは、グレゴリオ暦を指定している。&lt;br /&gt;&lt;br /&gt;NSDateComponents *dateComponents = [gregorian components:(NSHourCalendarUnit  | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:now];&lt;br /&gt;NSDateComponentsクラスオブジェクトの生成を行う。&lt;br /&gt;NSDateComponentsクラスは、カレンダーの年、月、日、時、分、秒、曜日を保持する。&lt;br /&gt;オブジェクトの取得は、NSCalendarクラスのcomponentsメソッドを使用する。&lt;br /&gt;componentsメソッドの引数は２つ。ひとつめは、Calendar Units。取得したいデータ（今回だと、時、分、秒）のこと。&lt;br /&gt;ふたつめは、現在の日時（取得済み）。&lt;br /&gt;&lt;br /&gt;形成されたNSDateComponentsから時、分、秒を取り出す。&lt;br /&gt;&lt;br /&gt;Calendar Unitsで取得したいデータが複数ある場合は、論理和で指定する。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-4443251272998846791?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4443251272998846791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4443251272998846791'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/07/appsamuckcom-day-1_27.html' title='Day 1 エラーの原因と正しい処理の内容'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-3394203287803207785</id><published>2010-07-24T21:03:00.004+09:00</published><updated>2010-07-26T21:22:58.579+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><category scheme='http://www.blogger.com/atom/ns#' term='shortcuts'/><title type='text'>Xcodeで矩形選択</title><content type='html'>テキスト中で矩形選択をしたい時のショートカット。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;option - (マウスで)ドラッグ&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_B66rCObfG4g/TErWQ6GmUcI/AAAAAAAAA8c/hUCg1J1wPiU/s1600/%E7%9F%A9%E5%BD%A2%E9%81%B8%E6%8A%9E.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="96" src="http://2.bp.blogspot.com/_B66rCObfG4g/TErWQ6GmUcI/AAAAAAAAA8c/hUCg1J1wPiU/s200/%E7%9F%A9%E5%BD%A2%E9%81%B8%E6%8A%9E.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-3394203287803207785?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/3394203287803207785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/3394203287803207785'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/07/xcode.html' title='Xcodeで矩形選択'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_B66rCObfG4g/TErWQ6GmUcI/AAAAAAAAA8c/hUCg1J1wPiU/s72-c/%E7%9F%A9%E5%BD%A2%E9%81%B8%E6%8A%9E.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2898754416980320866.post-4252584004167412172</id><published>2010-07-24T09:55:00.020+09:00</published><updated>2010-09-11T10:25:30.819+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>appsamuck.com / Day 1 Minutes to Midnight ローカル環境で実行してみる</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: 11px;"&gt;&lt;a href="http://appsamuck.com/"&gt;appsamuck.com&lt;/a&gt;　というサイトで、iPhoneアプリのチュートリアルが紹介されていた（Zipソース付き）。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: 11px;"&gt;実際にひとつずつ挑戦してみたいと思う。&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: 11px;"&gt;まずは、&lt;a href="http://appsamuck.com/day1.html"&gt;Day 1&lt;/a&gt;から。これは、時計アプリのようだ。説明にそってローカル環境で手を動かして作ってみた。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: 11px;"&gt;…………。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;『アウトレット』のあたりでつまずいた。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;iPhoneやCocoaに関する知識はもちろん、Objective-Cも初心者。なので、、、&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;ZipをダウンロードしてXcodeで『ビルドと実行』してみた。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;…………。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;エラー。。。。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;以下の解決法２つを実行後、無事にローカル環境のエミュレータ上でアプリが動いた。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;Zipソースを解凍して、Xcodeで開く。『ビルドと実行』をクリック。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: 11px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;→　結果：There is no SDK with the name or path 'iphoneos2.0'　とエラーが出る。&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: 11px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: 11px;"&gt;解決方法１：&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: 11px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;プロジェクト＞プロジェクト設定を編集＞「一般」タブで、「&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: 11px;"&gt;全ての構成のベース　SDK：」のプルダウンメニューから&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;b&gt;『iPhone デバイス 4.0』を選択する。その後、Xcodeを再起動する。&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;もう一度、『ビルドと実行』をクリック。&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: 11px;"&gt;&lt;b&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;→　結果：&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;MinutesToMidnightViewController.mの４４．４５．４６行目に、 error: invalid operands to binary - (have 'int' and 'id')　とエラーが出る。&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;br /&gt;解決方法２：&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;Objective-Cが分からないので、googleで検索して&lt;a href="http://stackoverflow.com/questions/1070354/how-do-i-get-the-current-date-in-cocoa"&gt;英語サイト&lt;/a&gt;に載っていた解決方法をそのままコピペ。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;br /&gt;以上の方法で、Day 1 は動いた。次回、エラーが出た部分のソース解析をしたいと思う。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898754416980320866-4252584004167412172?l=kyykblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4252584004167412172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898754416980320866/posts/default/4252584004167412172'/><link rel='alternate' type='text/html' href='http://kyykblog.blogspot.com/2010/07/appsamuckcom-day-1.html' title='appsamuck.com / Day 1 Minutes to Midnight ローカル環境で実行してみる'/><author><name>ky_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
