ObjectiveResourceを使ったサーバー連携
それでは、いよいよiPhoneアプリ「ひとりったー」をサーバー連携してみましょう
ObjectiveResourceの組み込み
ObjectiveResourceのダウンロードページにある「1.01 Libraries」をダウンロードしZIPファイルを展開します。
Xcode左カラムの「Classes」を右クリックし「追加」→「既存のファイル」で上で展開してできたobjective_resourceディレクトリを選択し、追加ボタンをクリックします、次に表示される画面では「ディスティネーショングループのフォルダに項目をコピーする」をチェックして追加ボタンをクリックします。
その結果、Classesにobjective_resourceが追加されます。
コードの変更
iPhone側のソースコードに通信機能を追加します。
Talkクラス
- ObjectiveResourceが使えるように ObjectiveResource.hをimportします。
- Ruby on RailsのModelにあるPrimary keyを格納するインスタンス変数を追加します。変数名はモデル名 + Idになります。
#import <Foundation/Foundation.h> #import "ObjectiveResource.h" // ← 追加 @interface Talk : NSObject { NSString *talkId; // ← 追加 NSDate *createdAt; NSString *text; } @property (nonatomic, retain) NSString *talkId; // ← 追加 @property (nonatomic, retain) NSDate *createdAt; @property (nonatomic, retain) NSString *text; @end
#import "Talk.h" @implementation Talk @synthesize talkId; // ← 追加 @synthesize createdAt; @synthesize text; - (void) dealloc { [talkId release]; // ← 追加 [createdAt release]; [text release]; [super dealloc]; } @end
HitoritterViewController.mへ通信機能の追加
HitoritterViewController.mには、変更のあったメソッドのみ書きました。viewDidLoadメソッドでは以下のように初期設定とデータの取得を行っています。pushOnTalk:メソッドでは新規のつぶやきの登録を行っています。
- 通信を行うサーバーの指定。
- やり取りする、日時フォーマットの指定。これに伴いObjectiveResourceDateFormatter.hのimport します。
- [Talk findAllRemote] でサーバーからつぶやきデータの一覧を取得し、talks配列に設定しています。
- 新規のつぶやきを [talk saveRemote] でサーバーに登録しています。
#import "HitoritterViewController.h" // ↓ 追加 (2) #import "ObjectiveResourceDateFormatter.h" #import "Talk.h" @implementation HitoritterViewController - (void)viewDidLoad { [super viewDidLoad]; // ↓ 追加 (1) [ObjectiveResourceConfig setSite:@"http://localhost:3000/"]; // ↓ 追加 (2) [ObjectiveResourceDateFormatter setSerializeFormat:DateTime]; talks = [[NSMutableArray alloc] init]; // ↓ 追加 (3) [talks setArray:[Talk findAllRemote]]; } - (IBAction)pushOnTalk:(id)sender { Talk *talk = [[[Talk alloc] init] autorelease]; talk.createdAt = [NSDate date]; talk.text = talkText.text; NSLog(@"entry %@: %@", talk.createdAt, talk.text); talkText.text = @""; [talkText resignFirstResponder]; [talks addObject:talk]; // ↓ 追加 (4) [talk saveRemote]; [talksTable reloadData]; } @end
コードの変更は、これだけです!
この変更でiPhoneアプリ起動時に、Ruby on Railsサーバーからつぶやきを取得し、iPhoneでつぶやいた内容はサーバーに送られます。HTTP通信やXMLへの変換コードはまったくいりません!!
![](http://cz-cdn.shoeisha.jp/static/images/article/5127/02.png)
まとめ
iPhoneアプリとサーバーとの連携機能は、今後ますます必要になってくると思います。その際にRuby on Railsを使ったサーバーアプリとObjectiveResoureceを使うことで簡単にサーバー側アプリや通信ができる事がお分かりいただけたでしょうか。
また、現在Ruby on Railsでサーバーアプリを開発されている方にはサーバーと連携するiPhoneアプリ作成のイメージをつかんでいただけたのではないかと思います。
ぜひ、Ruby on Railsと連携するiPhoneアプリに挑戦してみてください。