arc4random(3)

2014. 05. 25
BSDライブラリ関数マニュアル ARC4RANDOM(3)


●名前

arc4randomarc4random_stirarc4random_addrandom
arc4乱数ジェネレータ


ライブラリ

標準Cライブラリ(libc、-lc)


書式

#include <stdlib.h>

u_int32_t
arc4random(void);

void
arc4random_stir(void);

void
arc4random_addrandom(unsigned char *dat, int datlen);


解説

arc4random()関数は、8x8の8ビットS-Boxを使用したarc4暗号で採用されているキーストリームジェネレータを利用します。
S-Boxは約21700の状態を取ることができます。
arc4random()関数は0 〜 232 - 1の範囲の擬似乱数を返すため、rand(3)random(3)の範囲の2倍あります。

arc4random_stir()関数は/dev/urandomからデータを読み込み、arc4random_addrandom()経由でS-Boxの順序を変えて使用しています。

arc4random()は自動的に自身を初期化するので、使用する前にarc4random_stir()を呼び出す必要はありません。


●例

以下にarc4random()を使用して従来のrand()やrandom()関数を挿入置換する方法を示します。

#define foo4random() (arc4random() % ((unsigned)RAND_MAX + 1))


●関連項目

rand(3)random(3)srandomdev(3)


●歴史

RC4はRSA Data Security社によって設計されました。
それはUSENETに匿名で投稿され、オリジナルの暗号文にアクセスできる複数の情報元によって同等であることが確認されました。
RC4は企業秘密であるため、この暗号化は現在ARC4と呼ばれています。


BSD 1997年4月15日



参考文献

Mac OS X Manual Page/arc4random(3)

Wikipedia/RC4

Wikipedia/Sボックス

0 CommentsPosted in 資料

Start Developing iOS Apps Today(14)~ここから何処へ行くのか

2014. 04. 21
●ここからどこへ行くのか

Start Developing iOS Apps Todayでは、iOSアプリ開発の基礎を学びました。
この時点で、最初のフル機能を持つアプリの開発を開始する準備が整いました。
アプリをシンプルなコンセプトからApp Storeへ持って行くのは小さなタスクではありませんが、このドキュメントで学んできた工程と実習が正しい方向に案内します。

where_to_go_2x.png

ここから何処へ行くのかいくつかの指針を以下に示します。

  • 開発者として登録

    アプリケーションの配布に関するガイド」の「アカウントの管理(p.17)」では、Appleの開発者として登録する工程を説明しています。

  • 美しいアプリのインターフェイスの設計を学ぶ

    iOS ヒューマンインターフェイス ガイドライン」では、iOS用ユーザインターフェイスの慣習でアプリの一貫性を維持する方法を教えています。

  • 言語を学ぶ

    Objective-Cによるプログラミング」では、Objective-Cプログラミング言語でのクラスの定義、メッセージの送信、データのカプセル化、その他様々なタスクを実行する方法を説明しています。

  • 素晴らしいアプリを開発することを学ぶ

    iOSアプリケーション プログラミングガイド」では、iOSアプリを開発する上で知っておくべき必須事項を説明しています。

  • 貴方が利用可能なテクノロジーについて学ぶ

    iOS テクノロジーの概要」では、iOSでアプリが利用することができるフレームワークや他のテクノロジーを説明しています。

  • ドキュメントへのアクセス

    情報の検索」では、利用可能なドキュメントを最大限活用する方法について説明しています。

  • アプリのデバッグとテスト

    Xcodeの概要」の「アプリケーションのデバッグ(p.87)」では、Xcodeで完全にアプリのデバッグとテストをする方法を教えます。

  • アプリの出荷

    アプリケーションの配布に関するガイド」では、テストのためにデバイスをプロビジョニングし、App Storeにアプリを提出する工程を説明しています。



●次のレベルにToDoListアプリを持って行く

ToDoリストアプリで、貴方は多数の組み込み動作から利益を得ました。
貴方は理解を高めるためにこのアプリを試し続けたり、何か新しいことを始めることもできます。
ToDoリストアプリを継続する場合、調べる領域は以下の通りです。

  • 貴方のToDoリストは、アプリを終了して再起動した時に消滅します。
    時間が経っても存続するようにする方法を探索することを勧めます。

  • 貴方はアプリの全てのコントロールでデフォルトの外観を使用しています。
    UIKitには多くのコントロールの外観をカスタマイズするための機能が含まれています。
    このテクノロジーを使用して、様々なユーザインターフェイスのオプションを探求してください。

  • 貴方はユーザがリストに項目を追加して完了したと印す方法を与えましたが、項目を削除する機能はありません。
    テーブルビューには編集をサポートするための組み込み動作を持っており、行の削除や並べ替えも含まれているので、アプリに取り入れることを検討してください。

iOSアプリの開発を続けて行くと、ローカライズやアクセシビリティ、外観のカスタマイズを含め、探求して行く残っている概念やテクノロジーが膨大であることが分かります。
まずは興味の方向を定義することから始まります。
貴方が概念を学んで実践してきたことを忘れないでください。

興味深い新たなテクノロジーやフレームワーク、デザインパターンに遭遇した際に、それをテストするために小さなアプリを記述することを躊躇しないでください。

貴方が実行することができるものの幅広さは威圧的に思えるかもしれませんが、このドキュメントで示された分割統治を採用することによって、最初のアプリをすぐに出荷できることが分かるでしょう。
App Storeにアプリを出した後で、徐々に追加の機能の組み込みを継続することができます。
次の素敵な何かを楽しみにしている貴方の顧客を惹き付けて維持するために、新しい方法が常にあります。



参考文献

Apple/Start Developing iOS Apps Today

0 CommentsPosted in 資料

Start Developing iOS Apps Today(13)~情報の検索

2014. 04. 14
●情報の検索

アプリを開発する際、貴方は学んだものをすぐに利用できる情報を望むでしょう。
貴方はXcodeから離れることなく、全ての情報を得ることができます。

Xcodeには一般および概念のガイド、フレームワークやクラスリファレンス、焦点を合わせたヘルプ記事を含む、多くの様々なドキュメントが格納された大規模なドキュメントスイートが付属しています。
このドキュメントへは、使用方法を知りたいXcodeの領域上で右クリックしたり、コンテキスト指向のコードヘルプのためにメインプロジェクトウィンドウでQuick Helpペインを開いたり、ガイドや完全なAPIリファレンスを見つけるためにドキュメントウィンドウで検索するなど、多くの方法でアクセスすることができます。

finding_info_2x_20140327191830732.png



●Xcodeのガイダンスに関するコンテキストヘルプ記事の使用

Xcode自体を使用している時にヘルプが必要な場合はヘルプ記事を見ます。
ヘルプ記事は、新しいクラスの作成やInterface Builderでのカスタムクラスの設定、自動レイアウトでの問題の解決など、一般的なタスクを解決する方法を示します。

貴方が何をしようとしているかにもよりますが、XcodeのUI要素上でControl + クリックすることによって、いくつかのヘルプ記事にアクセスすることができます。
コンテキストメニューの最後のエントリ(この画像ではProject Navigator Help)を探してください。

contextualHelp_2x.png

一般的なヘルプ、またはControl + クリックでサポートされていない要素に関連付けられているタスクについての情報を下げしている場合は、XcodeのHelpメニューにあるコンテキストヘルプで検索することもできます。

helpMenu_2x.png



●一般および概念の概要についてのガイドの使用

新しいテクノロジーについて学ぶため、またはフレームワーク内の様々なクラスを組み込んで処理を行う方法を深く理解して身につけるためには、その概念のガイドを見てください。
ほとんどのCocoaフレームワークとテクノロジーは、Sprite Kit Programming GuideObjective-Cによるプログラミング、そして位置情報とマッププログラミングガイドなど、それらに関連付けされたプログラミングガイドがあります。

Xcodeでそれらのドキュメントを表示するには、Help > "Documentation and API Reference"を選択することで(またはOption + Shift + 0を押して)アクセスできるドキュメントビューアウィンドウを使用します。
Sprite Kitなど、単純にテクノロジーの名前を入力します。

findingSpriteKit_2x.png

結果は、コードを記述している時に最も有用である順番になります。
これはAPIリファレンスが最初にリストアップされ、続いてSDKやツールのガイドが表示されることを意味します。

ポップアップリストに適切な結果が表示されない場合はフィルタリングすることができ、結果の完全なセットを表示するにはShow All Resultsを選択します。

showAllResults_2x.png



●クラス情報についてのAPIリファレンスの使用

テクノロジーの様々な部分について学ぶためにガイドを読んでテクノロジーを使用するコードを書き始める際、貴方はおそらく個々のクラスで何ができるかの詳細を知る、または特定のメソッドを呼び出すための正確な方法を学ぶ必要があることに気付くでしょう。
この情報はAPIリファレンスドキュメントで提供されています。

例えば以前のチュートリアルで使用したNSStringクラスの詳細については、ドキュメントビューアウィンドウの検索欄でクラス名を入力します。

searchForClass_2x.png

Top Hitは通常貴方が望むもので、選択してReturnキーを押すとクラスのAPIリファレンスが見れます。

nsstringClassRef_2x.png

APIリファレンスドキュメントは、クラスが提供するメソッドのリスト、親クラスや採用されているプロトコルなどの情報が含まれ、個々のクラスについての情報に素早くアクセスすることができるように設計されています。
クラスについての一般的な情報を見るには、"More Related items"をクリックしてください。

nsstringInfo_2x.png

Related Itemsのポップオーバーは関連ガイドのリストを表示します。
NSStringで例えばリファレンス情報を掘り下げるのよりも、より概念的な概要を望む場合は「文字列操作プログラミングガイド」を読む必要があります。

特定のメソッドやプロパティを説明することに加えて、APIリファレンスドキュメントはクラスが実行することができる全てのタスクの概要も提供しています。

nsstringTasks_2x.png



●コンテキストソースコード情報についてのQuick Helpの使用

ソースエディタでコードを記述している時、Quick Helpペイン(View > Utilities > Show Quick Help Inspectorを選択)でAPIリファレンスドキュメントに簡単にアクセスできます。
貴方がコードを記述すると同時にQuick Helpペインが更新され、現在入力しているシンボルについての情報を表示します。

quickHelp_2x.png

またQuick Help情報をポップアップウィンドウで表示するには、ソースエディタでシンボルをOption + クリックすることができます。

optClickPopup_2x.png

Quick Helpペインやポップアップウィンドウでは、別のドキュメントビューアウィンドウでAPIリファレンスを開くことや、クリックしたシンボルの宣言を含むオリジナルのヘッダファイルを表示することができます。



●実際の使用を表示するためのサンプルコードの使用

書かれたドキュメントに加えて、サンプルコードのライブラリにアクセスすることもできます。
Quick Help、あるいはドキュメントビューアウィンドウでガイドやリファレンスを見る度に、指定したテクノロジーまたはクラスに関連したサンプルコードプロジェクトを示すエントリが表示されます。

quickHelp_2x_201403292326288f6.png

コードを検討することができるようにするには、Xcodeでダウンロードしてプロジェクトを開くために、いずれかのサンプルコードのエントリをクリックしてください。

プロジェクトの至る所にコードのコメントがあることに加え、より大きなコードサンプルの一部にはドキュメントも添付されています。
例えばSprite Kitのアドベンチャープロジェクトは「code:Explained Adventure」を伴います。

codeExplained_2x.png



参考文献

Apple/Start Developing iOS Apps Today

0 CommentsPosted in 資料

Start Developing iOS Apps Today(12)~iOSテクノロジー

2014. 04. 07
●iOSテクノロジー

貴方はシンプルなユーザインターフェイスと基本的な動作を持つアプリを作成する方法を学びました。
この時点で、完全な機能を持つアプリにするためプロジェクトに追加の動作を実装することを検討するのも良いでしょう。

どの機能を追加するか検討する際、最初から全てを実装する必要はないことを覚えておいてください。
iOSは、アプリに統合することができる(ゲームやメディアからセキュリティやデータ管理に至る)特定の機能のセットを定義するフレームワークを提供しています。
貴方は既にアプリのユーザインターフェイスの設計にUIKitフレームワークを、そしてコードに一般的なデータ構造や動作の組み込みにFoundationフレームワークを使用しています。
これらはiOSアプリ開発で使用される最も一般的なフレームワークの2つですが、更に役立つ多くのフレームワークがあります。

technologies_2x.png

この章は、アプリで採用を検討するためのテクノロジーとフレームワークの高レベルの概要です。
利用可能なテクノロジーを探索するための出発点として、この章を使用してください。
iOSで利用可能なテクノロジーの完全な概要は「iOSテクノロジーの概要」を参照してください。



●ユーザインターフェイス

iOSはアプリのユーザインターフェイスを作成し強化するための、多くの多くのフレームワークとテクノロジーを持っています。

UIKit
UIKitフレームワークは、タッチベースのユーザインターフェイスを作成するためのクラスを提供しています。
全てのiOSアプリはUIKitに基づいているため、このフレームワーク無しにアプリを発売することはできません。
UIKitは画面の描画やイベント処理、一般的なユーザインターフェイス要素を作成するためのインフラストラクチャを提供します。
またUIKitは画面上に表示するコンテンツを管理することによって、複雑なアプリを編成します。
詳細については「UIKit Framework Reference」を参照してください。

Core Graphics
Core Graphicsは、高品質なベクターグラフィックスやパスベースの描画、変換、画像、データ管理などを処理するための(低レベルなCベースの)主要なフレームワークです。
もちろんiOSでグラフィックスを作成するための最も簡単で効率的な方法は、UIKitフレームワークの標準のビューとコントロールでレンダリング済みの画像を使用して、iOSに描画の実行を任せることです。
UIKitは(パスや色、パターン、グラデーション、画像、テキスト、そして変換を含む)カスタム描画のためのクラスも提供している高レベルのフレームワークなので、可能な限りCore Graphicsの代わりに使用します。
詳細については「Core Graphics Framework Reference」を参照してください。

Core Animation
Core Animationは、高度なアニメーションと視覚的効果を作成することができるテクノロジーです。
UIKitはCore Animationテクノロジーの上に構築されたアニメーションを提供します。
UIKitの能力を超える高度なアニメーションが必要な場合は、直接Core Animationを使用することができます。
Core AnimationのインターフェイスはQuartz Coreフレームワークに含まれています。
Core Animationを使用して、回転や拡大縮小、変換などの操作をするレイヤオブジェクト階層を作成します。
Core Animationの使い慣れたビューのような抽象化を使用することによって、OpenGL ESなどの低レベルグラフィックスAPIを使用することなく、動的なユーザインターフェイスを作成することができます。
詳細については「Core Animationプログラミングガイド」を参照してください。



●ゲーム

iOS用のゲームを開発する時には、多数の様々なテクノロジーを探索します。

Game Kit
Game Kitフレームワークは、貴方のiOSゲームに追加するリーダーボードや成果、およびその他の機能を提供します。
詳細については「Game Kit Framework Reference」を参照してください。

Sprite Kit
Sprite Kitフレームワークは、任意のテクスチャ画像またはスプライトのアニメーションのためのグラフィックスサポートを提供します。
グラフィックエンジンであることに加えて、オブジェクトの振る舞いに物理的なサポートも含んでいます。
Sprite Kitは複雑なアニメーションチェーンを必要とするゲームや他のアプリにとって良い選択です。
(他の種類のユーザインターフェイスのアニメーションについては、代わりにCore Animationを使用してください。)
詳細については「Sprite Kit Programming Guide」を参照してください。

OpenGL ES
OpenGL ESは、ハードウェアアクセラレーションでの2Dおよび3D描画をサポートするためのツールを提供する低レベルフレームワークです。
OpenGL ES標準のAppleの実装では、ゲームスタイルのアプリでフルスクリーンでの高フレームレートを提供するために、デバイスのハードウェアと密接に連携します。
OpenGL ESは低レベルでハードウェアに焦点を当てたAPIなため、急な学習曲線を持ちアプリ全体の設計に重大な影響を与えます。
(より特殊な用途の高性能グラフィックスが必要なアプリの場合、Sprite KitやCore Animationの使用を検討してください。)
詳細については「iOS OpenGL ESプログラミングガイド」を参照してください。

Game Controller
Game Controllerフレームワークは、MacやiOSでバイスに接続されたコントローラを簡単に見つけることができます。
コントローラがデバイス上で検出された時、ゲームは通常のゲームプレイの一環として制御入力を読み込みます。
これらのコントローラは、ゲームを制御するプレイヤのために新たな方法を提供します。
Appleは、全てのコントローラがプレイヤとゲーム設計者の両方が信頼することができる制御要素の一貫した設定を持っていることを保証するために、ハードウェアコントローラの仕様を設計しています。
詳細については「Game Controller Framework Reference」を参照してください。



●データ

アプリのデータを処理する時、既存のフレームワークに利用することができる機能があるか検討してください。

Core Data
Core Dataフレームワークは、アプリのデータモデルを管理します。
Core Dataを使用すると、管理オブジェクトとして知られるモデルオブジェクトを作成します。
貴方はこれらのオブジェクト間の関係を管理し、フレームワークを介してデータに変更を加えます。
Core Dataは組み込みのSQLiteテクノロジーを利用して、効率的にデータの格納し管理します。
詳細については「Core Data Framework Reference」を参照してください。

Foundation
このガイドでは早い段階でFoundationで処理してきました。
FoundationフレームワークはObjective-Cクラスの基盤レイヤを定義しています。
便利なプリミティブオブジェクトクラスのセットを提供していることに加えて、このフレームワークはObjective-C言語では扱っていない動作を定義するいくつかのパラダイムが導入されています。
特にこのフレームワークは文字列や数値などの基本的なデータ型と、他のオブジェクトを格納するためのコレクションクラスを表すクラスが含まれています。
詳細については「Foundation Framework Reference」を参照してください。



●Media

Mediaフレームワークは、アプリでオーディオやビデオを処理するための機能を多数提供しています。

AVFoundation
AVFoundationは、時間ベースのオーディオビジュアルメディアの再生と作成に使用することができる、いくつかのフレームワークの一つです。
例えばメディアファイルの調査や作成、編集、または再エンコードにAV Foundationを使用することができます。
またデバイスから入力ストリームを取得し、キャプチャや再生中にリアルタイムでビデオを操作することもできます。
詳細については「AV Foundation Framework Reference」を参照してください。



参考文献

Apple/Start Developing iOS Apps Today

0 CommentsPosted in 資料

Start Developing iOS Apps Today(11)~チュートリアル:データの追加

2014. 03. 31
●チュートリアル:データの追加

このチュートリアルは、2つ目のチュートリアル(チュートリアル:ストーリーボード)で作成したプロジェクトに基づいています。
ToDoListアプリに動的データのサポートを追加するために、これまで学んだデザインパターンの使用や、Foundationとの連携、カスタムクラスの記述を使用します。

このチュートリアルでは以下の方法を教えます。

  • 一般的なFoundationクラスとの連携
  • カスタムデータクラスの作成
  • デリゲートとデータソースプロトコルの実装
  • ビューコントローラ間でデータを渡す

このチュートリアルの全ての手順を完了すると、次のような見た目のアプリになります。

ios_simulator_add_new_item_2x.png  ios_simulator_full_list_checked_2x.png



●データクラスの作成

開始するにはXcodeで既存のプロジェクトを開きます。

この時点で、ストーリーボードを使用したToDoListアプリのためのインターフェイスとナビゲーションスキームを持っています。
ここではデータストレージとモデルオブジェクトとの動作を追加します。

アプリの目標はToDo項目のリストを作成することなので、最初に個々のToDo項目を表すためのカスタムクラスXYZToDoItemを作成します。
ご存知のように、XYZToDoItemクラスは「カスタムクラスの記述」で説明しました。


XYZToDoItemクラスの作成

  1. File > New > Fileを選択します(またはCommand + Nを押します)。

    新しいファイルのテンプレートの選択を促すダイアログが表示されます。

  2. 左側でiOSの下のCocoa Touchを選択します。

  3. Objective-C classを選択し、Nextをクリックします。

  4. Class欄で、XYZ接頭辞の後にToDoItemと入力します。

  5. "Subclass of"のポップアップメニューからNSObjectを選択します。

    正確にチュートリアルを追ってきた場合、クラスのタイトルはおそらくこの前工程のXYZToDoItemViewControllerとなっています。
    "Subclass of"でNSObjectを選択すると、Xcodeは通常のカスタムクラスを作成すると知り、以前に追加していたViewControllerテキストを削除します。

  6. Nextをクリックします。

  7. 保存場所はデフォルトでプロジェクトのディレクトリになっています。
    そのままにしておきます。

  8. Groupオプションはデフォルトでアプリ名のToDoListになっています。
    そのままにしておきます。

  9. Targetsセクションはデフォルトでアプリが選択、アプリのテストは非選択になっています。
    これは完璧なので、そのままにしておきます。

  10. Createをクリックします。

XYZToDoItemクラスは簡単に実装できます。
名前、作成日時、項目が完了したかどうかのプロパティを持ちます。
この後、XYZToDoItemクラスのインターフェイスでこれらのプロパティを追加します。


XYZToDoItemクラスの構成

  1. プロジェクトナビゲータでXYZToDoItem.hを選択します。

  2. 以下のようにインターフェイスにプロパティを追加します。

    @interface XYZToDoItem : NSObject

    @property NSString *itemName;
    @property BOOL completed;
    @property (readonly) NSDate *creationDate;

    @end

チェックポイント:Product > Buildを選択して(またはCommand + Bを押して)プロジェクトをビルドします。
貴方はまだ新しいクラスで何も使用していませんが、ビルドするとコンパイラが何らかの入力ミスを行っていないかを確認する機会を与えてくれます。
コンパイラが提供する警告やエラーを通して読むことによってそれらを修正し、全てがここで説明している方法に見えるか確認するために、このチュートリアルの手順を振り返ってください。



●データの読み込み

これで個々のリスト項目のデータを作成して格納することができるクラスができました。
また、それらの項目のリストを保持する必要があります。
これを追跡するための自然な場所は、(モデルとビュー間の調整を担当して、モデルを参照する必要がある)XYZToDoListViewControllerクラスです。

Foundationフレームワークには、項目のリストの追跡に適したクラスNSMutableArrayが含まれています。
ユーザが配列に項目を追加するために、可変配列を使用することが重要です。
不変バージョンのNSArrayでは、初期化した後に項目を追加することはできません。

配列を使用するには、それを宣言して作成することの両方が必要です。
配列の割り当てと初期化をすることによって、これを行います。


配列の割り当てと初期化

  1. プロジェクトナビゲータでXYZToDoListViewController.mを選択します。

    項目の配列はテーブルビューコントローラの実装の詳細なので、.hファイルの代わりに.mファイルに宣言します。
    これはカスタムクラスでのプライベートになります。

  2. Xcodeがカスタムテーブルビューコントローラクラス内に作成したインターフェイスの範疇に、以下のプロパティを追加します。
    宣言は次のようになります。

    @interface XYZToDoListViewController ()

    @property NSMutableArray *toDoItems;

    @end

  3. viewDidLoadメソッドでtoDoItems配列の割り当てと初期化を行います。

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.toDoItems = [[NSMutableArray alloc] init];
    }

viewDidLoadの実際のコードでは、(XYZListViewControllerを作成した時にXcodeによって挿入された)コメントアウトされているいくつかの追加の行が挿入されています。
気にせずにそのままにしておきます。

この時点で、項目を追加することができる配列を持っています。
これを行うのは別個のメソッドloadInitialDataで、viewDidLoadから呼び出します。
このコードはモジューラタスクなため独自のメソッドで行い、別個のメソッドを作成することによってコードの可読性を向上させることができます。
実際のアプリでは、このメソッドはファイルなどある種の永続ストアからデータを読み込みます。
今のところ、目標はテーブルビューがカスタムデータ項目でどのように動作するかを確認することなので、実験のためにいくつかのテストデータを作成します。

配列を作成した方法(割り当てと初期化)で項目を作成します。
その後、項目に名前を付けます。
これはテーブルビューに表示される名前です。
いくつかの項目に対してこれを行います。


初期データの読み込み

  1. @implementation行の下に、新しいメソッドloadInitialDataを追加します。

    - (void)loadInitialData {
    }

  2. このメソッド内でいくつかのリスト項目を作成し、配列に追加します。

    - (void)loadInitialData {
        XYZToDoItem *item1 = [[XYZToDoItem alloc] init];
        item1.itemName = @"Buy milk";
        [self.toDoItems addObject:item1];
        XYZToDoItem *item2 = [[XYZToDoItem alloc] init];
        item2.itemName = @"Buy eggs";
        [self.toDoItems addObject:item2];
        XYZToDoItem *item3 = [[XYZToDoItem alloc] init];
        item3.itemName = @"Read a book";
        [self.toDoItems addObject:item3];
    }

  3. viewDidLoadメソッド内でloadInitialDataを呼び出します。

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.toDoItems = [[NSMutableArray alloc] init];
        [self loadInitialData];
    }

チェックポイント:Product > Buildを選択してプロジェクトをビルドします。
loadInitialDataメソッドの行で多数のエラーが表示されるはずです。
うまく行かない鍵は最初の行で、“Use of undeclared identifier XYZToDoItem”を言う必要があるからです。
これはXYZToDoListViewControllerをコンパイルする時に、コンパイラがXYZToDoItemについて知らないことを意味します。
コンパイラは非常に特殊であり、何に注意を払うかを明示的に指示する必要があります。


カスタムリスト項目クラスに注意を払うようにコンパイラに指示

  1. XYZToDoListViewController.mの先頭近くの行にある、#import "XYZToDoListViewController.h"を見つけます。

  2. すぐ下に次の行を追加します。

    #import "XYZToDoItem.h"

チェックポイント:Product > Buildを選択してプロジェクトをビルドします。
ここではエラー無しでビルドする必要があります。



●データの表示

この時点で、テーブルビューは
いくつかのサンプルToDo項目が事前に入っている可変配列を持っています。
ここでテーブルビューにデータを表示する必要があります。

XYZToDoListViewControllerでテーブルビューのデータソースを作成することによって、これを行います。
何らかのテーブルビューのデータソースを作成するには、UITableViewDataSourceプロトコルを実装する必要があります。
実装する必要があるメソッドは、ちょうど2つ目のチュートリアルでコメントアウトしたので、これを反転します。
テーブルビューが機能するようにするには、3つのメソッドが必要です。
1つ目はnumberOfSectionsInTableView:で、表示するセクション数をテーブルビューに伝えます。
このアプリでは、テーブルビューで単一のセクションを表示したいので、実装は簡単です。


テーブルでのセクションの表示

  1. プロジェクトナビゲータでXYZToDoListViewController.mを選択します。

  2. 2つ目のチュートリアルでテーブルビューのデータソースメソッドをコメントアウトした場合は、ここでコメントマーカを削除します。

  3. 以下のようなテンプレートの実装部分を探します。

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
    #warning Potentially incomplete method implementation.
        // Return the number of sections.
        return 0;
    }

    単一のセクションにしたい場合、警告行を削除して、戻り値を0から1に変更します。

  4. 単一セクションを返すため、以下のようにnumberOfSectionsInTableView:データソースメソッドを変更します。

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
    // Return the number of sections.
    return 1;
    }

次のメソッドはtableView:numberOfRowsInSection:で、指定したセクションで表示する行数をテーブルビューに伝えます。
テーブルには単一のセクションが有り、各ToDo項目はテーブルビューに独自の行を持つ必要があります。
つまり行数はtoDoItem配列内のXYZToDoItemオブジェクトの数にする必要があることを意味します。


テーブル内の行数を返す

  1. プロジェクトナビゲータでXYZToDoListViewController.mを選択します。

  2. 以下のようなテンプレートの実装部分を探します。

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        #warning Incomplete method implementation.
        // Return the number of rows in the section.
        return 0;
    }

    貴方はリストの項目数を返すようにしたいでしょう。
    幸いなことに、NSArrayは配列内の項目数を返すcountと呼ばれる便利なメソッドを持っており、行数は[self.toDoItems count]で得られます。

  3. 適切な行数を返すように、tableView:numberOfRowsInSection:データソースメソッドを変更します。

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        // Return the number of rows in the section.
        return [self.toDoItems count];
    }

最後のメソッドはtableView:cellForRowAtIndexPath:で、指定した行に表示するセルを尋ねます。
これまではコードだけで作業してきましたが、行に表示するセルはインターフェイスの大部分を占めます。
幸いなことに、XcodeはInterface Builderでカスタムセルを容易に設計することができます。
最初のタスク、テーブルビューに伝えるために静的コンテンツを使用する代わりに、動的コンテンツでプロトタイプセルを使用するセルを設計します。


テーブルビューの設定

  1. ストーリーボードを開きます。

  2. アウトラインでテーブルビューを選択します。

  3. テーブルビューが選択された状態で、ユーティリティ領域で属性インスペクタinspector_attributes_2x_20140209113430cca.png を開きます。

  4. 属性インスペクタで、テーブルビューのContent属性をStatic CellsからDynamic Prototypesに変更します。

Interface Builderは設定された静的セルを取得し、それらを全てプロトタイプに変換します。
プロトタイプセルはその名が示す通り、設定されたテキスト形式、色、画像、または他の属性を、貴方が望む際に実行時にデータソースからデータを取得して表示するセルです。
データソースは各行のプロトタイプセルを読み込んでから、行のデータを表示するために設定されます。

適切なセルを読み込むにはデータソースが呼び出される物を知っている必要があり、その名前もストーリーボードで設定する必要があります。

貴方はプロトタイプセル名を設定していますが、別のプロパティ(ユーザがタップした時のセルの外観を決定する、セルの選択スタイル)も設定することになります。
ユーザがタップした時にセルがハイライト表示されないようにするためには、セルの選択スタイルをNoneに設定します。
これは(このチュートリアルの後半で実装する機能の)ユーザがToDoリストの項目をタップした時に、完了または未了として印したいセルの動作です。


プロトタイプセルの設定

  1. テーブルで最初のテーブルビューセルを選択します。

  2. 属性インスペクタでIdentifier欄を探し、ListPrototypeCellと入力します。

  3. 属性インスペクタでSelection欄を探し、Noneを選択します。

またプロトタイプセルのフォントや他の属性を変更することもできます。
基本的な設定は容易な作業なので、しておきましょう。

次の手順はtableView:cellForRowAtIndexPath:を実装することによって、指定した行のセルをどのように設定するかをデータソースに教える事です。
このデータソースメソッドは、指定した行を表示したい時にテーブルビューによって呼び出されます。
行が少数のテーブルビューでは、おそらく全ての行が一度に画面に表示されますが、このメソッドはテーブルの各行毎に呼び出されます。
しかし多数の行を含むテーブルビューでは、特定の時点で総項目の極一部のみ表示されます。
テーブルビューにとって表示されている行のセルのみを尋ねるのが最も効率的で、tableView:cellForRowAtIndexPath:はテーブルビューにそれを行うことができます。

テーブル内の任意の行について、toDoItems配列内の対応するエントリを取り出し、項目名にセルのテキストラベルを設定します。


テーブル内のセルの表示

  1. プロジェクトナビゲータでXYZToDoListViewController.mを選択します。

  2. tableView:cellForRowAtIndexPath:データソースメソッドを探します。
    テンプレートの実装は次のようになります。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        // Configure the cell...

        return cell;
    }

    テンプレートではいくつかのタスクを実行します。
    セルの識別子を保持する変数を作成し、その識別子を持つセルのためのテーブルビューを尋ね、セルを構成するためのコードが行く場所についてのコメントが追加され、そしてセルを返しています。

    貴方のアプリ用にこのコードを機能させるには、ストーリーボードで設定するために識別子を変更し、セルを構成するコードを追加する必要があります。

  3. ストーリーボードで設定するために、セル識別子を変更します。
    タイプミスを避けるために、ストーリーボードから実装ファイルにコピー&ペーストします。
    セル識別子の行は次のようになります。

    static NSString *CellIdentifier = @"ListPrototypeCell";

  4. return文の直前に以下のコード行を追加します。

    XYZToDoItem *toDoItem = [self.toDoItems objectAtIndex:indexPath.row];
    cell.textLabel.text = toDoItem.itemName;

貴方のtableView:cellForRowAtIndexPath:メソッドは以下のようになります。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"ListPrototypeCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    XYZToDoItem *toDoItem = [self.toDoItems objectAtIndex:indexPath.row];
    cell.textLabel.text = toDoItem.itemName;
    return cell;
}

チェックポイント:アプリを実行します。
loadInitialDataで追加した項目のリストがテーブルビューのセルとして表示される必要があります。



●完了として項目を印す

項目に完了したと印すことができない場合、ToDoリストとしてあまり良くありません。
ここで、そのためのサポートを追加します。
シンプルなインターフェイスは、ユーザがセルをタップした時に完了状態を切り替えられるようにし、その横にチェックマークで完了した項目を表示するようにします。
幸いなことに、テーブルビューには(特にユーザがセルをタップした時に、テーブルビューがデリゲートに通知するといった)このシンプルなインターフェイスを実装するために利用することができる、いくつかの組み込み動作が含まれています。
したがってタスクは、ユーザがテーブル内のToDo項目をタップすることに対応するコードを記述することです。

Xcodeは既にストーリーボードで設定した時に、テーブルビューのデリゲートXYZToDoListViewControllerを作成しています。
貴方はユーザのタップに応答してToDoリストの項目を適切に更新するために、tableView:didSelectRowAtIndexPath:デリゲートメソッドを実装する必要があります。

セルが選択された時に、テーブルビューはどのような選択処理をする必要があるのかを確認するために、tableView:didSelectRowAtIndexPath:デリゲートメソッドを呼び出します。
このメソッドには、ToDo項目の完了状態を更新するためのコードを記述します。


完了または未了として項目を印す

  1. プロジェクトナビゲータでXYZToDoListViewController.mを選択します。

  2. ファイルの最後の@end行の上に、以下の行を追加します。

    #pragma mark - Table view delegate

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {

    }

    2行目はコピー&ペーストをする代わりに、入力してみてください。
    Xcodeの素晴らしい時間節約機能の一つであるコード補完が分かります。
    Xcodeが潜在的な補完のリストを表示する際に、貴方が望む物を見つけてReturnを押すまでスクロールします。
    Xcodeは行全体を挿入します。

  3. タップには応答するが、実際にセルが選択されたままにしたくはありません。
    選択した直後にセルの選択を解除するには以下のコードを追加します。

    [tableView deselectRowAtIndexPath:indexPath animated:NO];

  4. toDoItems配列内で対応するXYZToDoItemを検索します。

    XYZToDoItem *tappedItem = [self.toDoItems objectAtIndex:indexPath.row];

  5. タップされた項目の完了状態を切り替えます。

    tappedItem.completed = !tappedItem.completed;

  6. データが更新された行を再読み込みするためにテーブルビューに伝えます。

    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];

tableView:didSelectRowAtIndexPath:メソッドは次のようになります。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:NO];
    XYZToDoItem *tappedItem = [self.toDoItems objectAtIndex:indexPath.row];
    tappedItem.completed = !tappedItem.completed;
    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
}

チェックポイント:アプリを実行します。
loadInitialDataに追加された項目のリストがテーブルビューのセルとして表示されます。
しかし項目をタップしても何も起きていないように見えます。
何故でしょう?

その理由は、項目の完了状態を表示するためのテーブルビューセルを構成していないからです。
方法はtableView:cellForRowAtIndexPath:メソッドに戻り、項目が完了した時にインジケータを表示するようにセルを構成する必要があります。

項目が完了したことを示す一つの方法は、横にチェックマークを置くことです。
幸いなことに、テーブルビューセルは右側にセルアクセサリを持つことができます。
デフォルトではアクセサリは何もありませんが、様々なアクセサリを表示するためにセルを変更することができ、その一つにはチェックマークもあります。
貴方はToDo項目の完了状態に基づいて、セルアクセサリを設定する必要があります。


項目の完了状態を表示

  1. tableView:cellForRowAtIndexPath:メソッドを表示します。

  2. セルのテキストラベルを設定する行の直後に、以下のコードを追加します。

    if (toDoItem.completed) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

tableView:cellForRowAtIndexPath:メソッドは次のようになります。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"ListPrototypeCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    XYZToDoItem *toDoItem = [self.toDoItems objectAtIndex:indexPath.row];
    cell.textLabel.text = toDoItem.itemName;
    if (toDoItem.completed) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
    return cell;
}

チェックポイント:アプリを実行します。
loadInitialDataで追加した項目のリストがテーブルビューのセルとして表示されます。
項目をタップするとチェックマークがその横に表示されます。
同じ項目を再度タップした場合、チェックマークが消えます。



●新しい項目の追加

ToDoリストアプリの機能を作成するための最後の手順は、項目を追加する機能を実装することです。
ユーザがXYZAddToDoItemViewControllerのシーン上のテキストフィールドで項目名を入力してDoneボタンをタップした時に、ビューコントローラは新しいリスト項目を作成して渡し、ToDoリストで表示するためにXYZToDoListViewControllerに戻るようにしたいでしょう。

まず、設定するためのリスト項目を持つ必要があります。
テーブルビューと同様に、ビューコントローラはモデルへのインターフェイスを接続するための論理的な場所です。
XYZAddToDoItemViewControllerに新しいToDo項目を保持するためのプロパティを与えます。


XYZAddToDoItemViewControllerクラスにXYZToDoItemを追加する

  1. プロジェクトナビゲータでXYZAddToDoItemViewController.hを選択します。

    後でテーブルビューコントローラからリスト項目にアクセスする必要があるため、パブリックプロパティとして作成することが重要です。
    これが実装ファイルXYZAddToDoItemViewController.mではなく、インターフェイスファイルXYZAddToDoItemViewController.hで宣言する理由です。

  2. XYZAddToDoItemViewController.hで、@interface行の上にXYZToDoItem.hのインポート宣言を追加します。

    #import "XYZToDoItem.h"

  3. インターフェイスにtoDoItemプロパティを追加します。

    @interface XYZAddToDoItemViewController : UIViewController

    @property XYZToDoItem *toDoItem;

    @end

新しい項目の名前を取得するには、ビューコントローラがユーザが名前を入力するテキストフィールドのコンテンツへのアクセスが必要になります。
これを行うには、ストーリーボードでXYZAddToDoItemViewControllerクラスからテキストフィールドへの接続を作成します。


ビューコントローラへのテキストフィールドの接続

  1. アウトラインビューでXYZAddToDoItemViewControllerオブジェクトを選択します。

  2. アシスタントエディタを開くために、ウィンドウのツールバーの右上にあるAssistantボタンをクリックします。

    assistant_editor_2x.png

    エディタの右側にXYZAddToDoItemViewController.mが表示されます。
    表示されなかった場合、右側のエディタでファイル名をクリックしてXYZaddToDoItemViewController.mを選択してください。

    アシスタントエディタは一度に2つのファイルを開くことができ、インターフェイスのオブジェクトとソースファイルのプロパティを接続するなど、それらの間の操作を実行することができます。

  3. ストーリーボードでテキストフィールドを選択します。

  4. キャンバス上のテキストフィールドからエディタの右側に表示されているコードにControl+ドラッグをし、XYZAddToDoItemViewController.mの@interface行の下の行でドラッドを止めます。

    assistant_editor_drag_2x.png

  5. 表示されるダイアログで、Name欄にtextFieldと入力します。

    残りのオプションはそのままにしておきます。
    ダイアログは次のようになります。

    configure_text_field_outlet_2x.png

  6. Connectをクリックします。

    Xcodeはテキストフィールドへのポインタを格納するためにXYZAddToDoItemViewController.mに必要なコードを追加し、その接続を設定するためにストーリーボードを構成します。

更に項目を作成する時に知っておく必要があることがあります。
貴方はDoneボタンがタップされた場合のみ、項目を作成したいでしょう。
これを行うには、アウトレットとしてDoneボタンを追加します。


ビューコントローラにDoneボタンを接続

  1. ストーリーボードでアシスタントエディタを開き、ウィンドウの右端にXYZAddToDoItemViewController.mを設定します。

  2. ストーリーボードでDoneボタンを選択します。

  3. キャンバス上のDoneボタンからエディタの右側に表示されているコードにControl+ドラッグをし、XYZAddToDoItemViewController.mのtextFieldプロパティの下の行でドラッドを止めます。

  4. 表示されるダイアログで、Name欄にdoneButtonと入力します。

    残りのオプションはそのままにしておきます。
    ダイアログは次のようになります。

    configure_done_button_outlet_2x.png

  5. Connectをクリックします。

これでDoneボタンを識別するための方法を持ちました。
Doneボタンをタップすると項目が作成されるので、貴方はこれが発生すると知っている必要があります。

ユーザがDoneボタンをタップすると、(2つ目のチュートリアルで構成したインターフェイスの)ToDoリストに戻るアンワインドセグエが始動します。
セグエが実行される前に、システムはprepareForSegue:を呼び出すことによって、関連するビューコントローラを準備する機会を与えます。
これはユーザがDoneボタンをタップしたかどうかを厳密に確認するためのもので、そうであれば新しいToDo項目を作成します。
いずれかのボタンをタップした場所を確認し、それがDoneボタンであった場合に項目を作成することができます。


Doneボタンをタップした後に項目を作成

  1. プロジェクトナビゲータでXYZAddToDoItemViewController.mを選択します。

  2. @imprementation行の下にprepareForSegue:メソッドを追加します。

    - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
    }

  3. このメソッドでは、Doneボタンがタップされたかどうかを確認します。
    そうでない場合は項目を保存する代わりに、メソッドは何も実行せずに返すようにします。

    if (sender != self.doneButton) return;

  4. テキストフィールドにテキストがあるかどうかを確認します。

    if (self.textField.text.length > 0) {
    }

  5. テキストがある場合、新しい項目を作成してテキストフィールドのテキストに名前を付けます。
    また、完了状態がNOに設定されていることを確実にします。

    self.toDoItem = [[XYZToDoItem alloc] init];
    self.toDoItem.itemName = self.textField.text;
    self.toDoItem.completed = NO;

    テキストが無い場合、項目を保存したくないため何もしません。

prepareForSegue:メソッドは以下のようになります。

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if (sender != self.doneButton) return;
    if (self.textField.text.length > 0) {
        self.toDoItem = [[XYZToDoItem alloc] init];
        self.toDoItem.itemName = self.textField.text;
        self.toDoItem.completed = NO;
    }
}

これで新しい項目を作成できるようになったので、ToDoリストに項目を追加できるように、XYZToDoListViewControllerに戻って項目を渡す必要があります。
これを実現するには、2つ目のチュートリアルで記述したunwindToList:メソッドを再考する必要があります。
このメソッドは、ユーザがCancelまたはDoneボタンのどちらかをタップした時に生ずる、XYZAddToDoItemViewControllerのシーンが閉じる際に呼び出されます。

unwindToList:メソッドは、アンワインドセグエのターゲットとして使用されている全てのメソッドのように、パラメータとしてセグエを取ります。
セグエパラメータは、XYZAddToDoItemViewControllerからXYZToDoListViewControllerに巻き戻るセグエです。
セグエは2つのビューコントローラ間の遷移なので、ソースビューコントローラ(XYZAddToDoItemViewController)を認識しています。
ソースビューコントローラのセグエオブジェクトを尋ねることによって、unwindToList:メソッドのソースビューコントローラに格納されているデータにアクセスすることができます。
この場合はtoDoItemへのアクセスです。
(テキストフィールドがテキストを持っていない、あるいはユーザがCancelボタンをタップして)nilの場合、項目は作成されません。
toDoItemの値がある場合、項目を取得してtoDoItems配列に追加し、テーブルビューのデータを再読み込みすることによってToDoリストに表示します。


新しい項目の格納と表示

  1. プロジェクトナビゲータでXYZToDoListViewController.mを選択します。

  2. XYZToDoListViewController.mで、@interface行の上にXYZAddToDoItemViewController.hのインポート宣言を追加します。

    #import "XYZAddToDoItemViewController.h"

  3. 2つ目のチュートリアルで追加したunwindToList:メソッドを探します。

  4. このメソッドで、XYZAddToDoItemViewControllerからアンワインドするコントローラであるソースビューコントローラを取得します。

    XYZAddToDoItemViewController *source = [segue sourceViewController];

  5. コントローラのToDo項目を取得します。

    XYZToDoItem *item = source.toDoItem;

    これはDoneボタンがタップされた時に作成された項目です。

  6. 項目が存在するかどうかを確認します。

    if (item != nil) {
    }

    nilの場合はCancelボタンで画面を閉じたか、またはテキストフィールドがテキストを持っていなかったかのどちらかで、項目を保存しません。

    存在する場合、toDoItems配列に項目を追加します。

    [self.toDoItems addObject:item];

  7. テーブルのデータを再読み込みします。

    テーブルビューはデータの追跡を保持しないため、表示するための新しいデータがある時にテーブルビューに通知するのはデータソース(この場合、テーブルビューコントローラ)の責任です。

    [self.tableView reloadData];

unwindToList:メソッドは次のようになります。

- (IBAction)unwindToList:(UIStoryboardSegue *)segue
{
    XYZAddToDoItemViewController *source = [segue sourceViewController];
    XYZToDoItem *item = source.toDoItem;
    if (item != nil) {
        [self.toDoItems addObject:item];
        [self.tableView reloadData];
    }
}

チェックポイント:アプリを実行します。
今では追加ボタン(+)をクリックして新しい項目を作成すると、ToDoリストに表示される必要があります。
おめでとう!
ユーザからの入力を受け取ってオブジェクトに格納し、2つのビューコントローラ間でオブジェクトを渡すアプリを作成できました。
これはストーリーボードベースのアプリでシーン間のデータ移動の基礎になっています。



●要約

貴方はiOSアプリ開発の入門ツアーをほとんど終えました。
最後の章ではドキュメントに関して貴方のやり方を検索する方法についてより多くの情報を与え、より高度なアプリを作成する方法を学ぶ上で採用する可能性のあるいくつかの次なる手順を提案しています。



参考文献

Apple/Start Developing iOS Apps Today

0 CommentsPosted in 資料





Bose Solo 5 TV sound system
Calendar
07 | 2017/08 | 09
Sun Mon Tue Wed Thu Fri Sat
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

ボーズ・オンラインストア
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR