IBOutlet、IBActionの解除方法
IBOutletでの接続はControl+ドラッグアンドドロップでやることが多いように思うのですが、これだけだと中で何が起こってるのかわからず、解除したいときにどこをどうすればいいのかわからなくなってしまいます。自分も今まで適当に部品やメソッドを削除したりしてなんとかしてたのですが、最近理解してきたのでメモしておきます。
おおまかな理解
IBOutletやIBActionで接続することによる変更点は
- IBOutlet、IBActionによる接続
- ViewController.hでのオブジェクトやメソッドの宣言
- ViewController.mでの自動生成されたメソッド(IBActionのみ)
です。内部で何が起こっているかは置いといて、外から操作できることに限った場合、1〜3をすべて削除することによって接続される前の状態に戻すことができます。2に関してはドラッグアンドドロップで生成された1行、3に関しては2の1行に対応した.mに生成されているメソッドを削除するだけで大丈夫です。1については次で説明します。
接続の解除方法
IBOutlet、IBActonでの接続を解除する方法を説明します。まず、IBOutlet、IBActionのリストをみる方法ですが、IBでオブジェクトを右クリックすると黒い画面が表示されると思います。オブジェクトのIBOutletやIBActionについては下のようにつながってる感じなものがあるので、解除したいIBOutletを探して×をクリックすることで接続を解除することができます。
また、ViewControllerを右クリックすることによってもこの黒い画面は表示されるのですが、IBOutletを解除するときでなくても全てのIBOutletのリストがみれて便利なので使い慣れておくといいと思います。
ちなみにオブジェクトやメソッドの宣言を削除しただけではこの接続は解除されないっぽいです。
IBでオブジェクトを削除したときの動作
IBの画面からオブジェクトを削除すると、IBOutletによる接続は自動的に解除されます。ただ、メソッドの宣言や内容は削除されていないので、自分でViewController.h,~.mを編集してそのOutletに対応する宣言などを削除する必要があります。自動的に削除してくれればいいのですが、おそらく今のところそのような機能はないようです。
InterfaceBuilderでオブジェクトの配置と連携(IBOutlet, IBAction)
オブジェクトをドラッグアンドドロップで配置
まず左のファイルリスト(Navigator → Command+1で表示、Command+2で消えるやつです)からstoryboardを選択します。すると真ん中にiphoneの画面野用なものが表示されると思います。ここにobjectを配置していくことになります。
右下にオブジェクトリストが表示されていると思います。表示されていない場合は、左の画像の丸で囲った部分をクリックすると表示されます。
この中からオブジェクトをドラッグして画面内にドロップします。
オブジェクトとプログラムの接続
IBOutletの使い方
オブジェクトをプログラムから操作するためにはオブジェクト名やオブジェクトの動作に対応するメソッド名を作る必要があります。IBOutletやIBActionを使うことによって画面にドロップしたオブジェクトの名前やメソッド名を決め、プログラムで制御することができるようになります。
storyboardを選択して画面が表示された状態にして、下の画像の上の方の丸を選択してAssistanteditorを表示させます。その後、オブジェクトControlを押しながらドラッグしてAssistant editorの@interfaceの下にドロップすると下画像のようなダイアログが表示されます。ConnectionをOutletにして、Nameにオブジェクト名を、Typeにオブジェクトの型を入力し、Storageを選択しましょう。
Storageはweakとstrongとあるのですが、これは弱参照か強参照を意味し、weakにすると参照元のオブジェクトがなくなったとき、自動的に破棄されます。親のビューが消えたときに消したい場合はweakを、勝手に消えてほしくないときはstrongとするのがいいらしいです。詳しくは下のサイトを参照してください。
http://ameblo.jp/iichin0708/entry-11394651725.html
http://ebisu.surbiton.jp/sysblog/2011/06/objc-memory.html
これでIBOutletによる接続が完了したので、プログラムから操作できるようになります。ViewController.mのViewDidLoadメソッドにオブジェクトlabel1のテキストを設定する下のメソッドを入力してRunでシュミレーションするとテキストがかわっているのがわかると思います。
(void)viewDidLoad
{
[super viewDidLoad];
label1.text = @"Hello"; //ここを入力
}
IBActionの使い方
オブジェクトに対してクリックイベントなどを発生させたい場合は、それに対応するメソッドを生成する必要があります。IBOutletと同様にドラッグアンドドロップを行うとダイアログが表示されるので、ConnectionをActionにします。ラベルのようにActionが選択できないオブジェクトもありますので注意してください。Nameにメソッド名を、Eventにメソッドが実行されるイベントを入力してください。Typeには引数の型(?)を、Argumentsに引数を選択するようなのですが、基本的にはデフォルトのidとsenderで大丈夫だと思います。
まとめ
これでオブジェクトとプログラムの連携は可能になりました。IBOutletを使うことでオブジェクト名を決定し、オブジェクトをプログラム内で操作することができ、IBActionで自動生成されたメソッドにプログラムを書くことでオブジェクトのイベントに対する動作を決定することができます。
Xcodeでのiphoneアプリの実機テストまでの手順
実機テストまでの手順です。この手順を行うことによって、自分で作ったアプリをAppStoreに登録しなくても自分のiphoneに入れてテストすることができるようになります。ここはとてもややこしく何度やってもやり方を忘れてしまうのでメモとして残しておきます。(2012/11/17の情報です。)
まずはiOSDeveloperProgram(https://developer.apple.com/programs/ios/)に登録しておきましょう。年間10000円ほどかかるのですが、appstoreに登録するには必須になるのでアプリを公開する予定のある方は登録しましょう。これにより実機テストも可能になります。登録のやり方ついては下のサイトなど参照してください。
http://secondflush2.blog.fc2.com/blog-entry-30.html
登録後も様々な作業が必要になります。手順の概要は以下のような感じです。
キーチェーンアクセスで証明書の要求を作成する
まずはアプリケーションからキーチェーンアクセスを起動します。起動したら、メニューバーの「キーチェーンアクセス→証明書アシスタント→認証局に証明書を要求」を選択します。下の画面が出るので、ユーザのメールアドレスにiOSDeveloperProgramで登録したメールアドレスを入力し、通称に適当な名前を入力します。CAのメールは空で大丈夫です。その後、ディスクに保存と鍵ペア情報を指定にチェックを入れます。
その後、保存するフォルダを選択し、鍵ペア情報を指定します。鍵ペア情報は下のようなウィンドウが表示されるので、鍵のサイズは2048ビットを、アルゴリズムはRSAを選択して、続ける→完了とクリックすると証明書の要求が作成されます。
MemberCenterで証明書をダウンロードする
まずはAppleDeveloperのMemberCenter(https://developer.apple.com/membercenter/index.action)にアクセスします。
6項目あると思うので、右上のiOS Provisioning Portalを選択してください。左のリストの中からCertificatesを選択すると下の画面が表示されますので、四角で囲ったRequestCertificationを選択します。ここでキーチェーンアクセスで作ったファイルを選択してSubmitをクリックすると、しばらくすると証明書がダウンロードできるようになります。しばらくしてページを更新するとRequestCertificationだった部分にDownloadボタンが表示されるので適当な場所に保存しましょう。
Xcodeで端末の認証を完了させる
まず保存した証明書をキーチェーンアクセスにドラッグアンドドロップしておきます。そしてXcodeを起動し、メニューバーの「Window->Organizer」を選択します。
Organizerのウィンドウが表示されるので、ウィンドウ上部のバーで一番右のDevicesを選択し、左のメニューからDEVICESの転送したい端末を選択します。UseForDevelopmentボタンを押すと実機転送への準備が完了します。
実機へ転送する
Xcodeで転送したいアプリのプロジェクトを開き、iphoneをUSBで接続します。上部左側に「(アプリ名)>iPhoneSimulator」となってる部分があると思うので、ここをクリックして、転送したい端末に変更しましょう。これを変更した上でRunを押すと端末へ転送され、アプリが自動的に起動します。空のプロジェクトだと真っ白の画面が表示されると思います。ここでエラーが表示される場合は、エラー名をそのままコピーして検索しましょう。だいたいこれで解決すると思います。
おそらくこれだけで大丈夫なのですが、検索しているとiOS Provisioning PortalからDevicesやAppIDsなどの設定が必要な場合もあるらしいので、うまくいかない場合は下のサイトなどを参照してください。最新のXcodeだとこれらは自動生成されるっぽいです。
http://blog.earthyworld.com/archives/iphone-device-add/
Xcode起動からプロジェクト作成まで
iphoneアプリのプロジェクト作成のメモです。
基本的な手順は以下のようになります。
- Xcodeを起動する。
- ウィザードに従ってプロジェクトの設定を行う。
Xcodeを起動する
まずはXcodeを起動しましょう。「Welcome to Xcode」のメニューが表示されるので、一番上のCreate a new Xcode Projectを選択しましょう。この後はひたすらウィザードに従ってプロジェクトを開発していくことになります。
テンプレートの選択
まずはテンプレートを選択します。iphoneのアプリ開発の場合は左のリストからiOSのApplicationを選択します。
その後、右のリストからどのテンプレートを使うか選択します。それぞれのテンプレートの概要は以下なので、適切なものを選びましょう。
- Master-Detail Application : 複数画面を階層的に画面遷移していくアプリのテンプレートです。
- OpenGL Game : OpenGLを使うゲームアプリのテンプレートです。
- Page-Based Application : 電子書籍のようにページをスワイプしてめくっていくようなアプリです。
- SingleView Application : 画面1枚のアプリのテンプレートです。あとで画面を追加することも可能なので、基本的に簡単なアプリはこれを使って作ることが多いです。
- Tabbed Application : 複数画面を下のタブ(バー)から選択するようなアプリです
- Utility Application : 画面が表と裏の2枚で、ボタンを押すとひっくり返るようなアプリです
- Empty Application : 全てを自分で作っていく用のテンプレートです。上級者の方以外は難しいのでおすすめしません。
プロジェクトの情報を設定する
次に様々なプロジェクトの情報の入力欄が表示されますので以下に従って入力していきます。
- Product Name : 製品名を入力します。これがプロジェクト名となるので、アプリの名前に近いものにしておくといいと思います。
- Organization Name : 組織名を入力します。会社の名前や自分の名前がすでに入力されていると思うのでそのままでもよいと思います。
- Company Identifier : 会社IDを入力します。ない場合は edu.self とするといいらしいです。
- Class Plefix : クラス接頭辞を入力します。これは自動生成されるクラス名の一部になります。
- Devices : どのデバイス向けのアプリかを選択します。iphoneとiPadどちらも使えるものにしたい場合はUniversalを選択します。
次にチェック欄です。
- Use Storyboards : ストーリーボードを使う場合は選択します。複数ページ構成のアプリを作る場合には画面遷移が圧倒的に楽になるのでチェックしておきましょう。
- Use Automatic Reference Counting : メモリ管理にARCを使うかどうかを決めます。ARCとは自動でメモリの管理をしてくれる機能なので、どうしても自分で管理したいという方以外はチェックしておきましょう。
- Include Unit Tests : プロジェクト作成と同時にその単体テスト用クラスが生成されます。
全て入力、選択し終えたら次へ進みます。
フォルダの選択
プロジェクトを作成するフォルダを選択します。
また、下の「Create local git repository」は、アプリのバージョン管理システムを使う場合にチェックするようです。
今のとこよくわかっていないので、なれてきたら記事を書こうと思います。
完了
すべての設定が完了したらCreateをクリックしましょう。これでプロジェクトの生成が完了します。