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への変換コードはまったくいりません!!

まとめ
iPhoneアプリとサーバーとの連携機能は、今後ますます必要になってくると思います。その際にRuby on Railsを使ったサーバーアプリとObjectiveResoureceを使うことで簡単にサーバー側アプリや通信ができる事がお分かりいただけたでしょうか。
また、現在Ruby on Railsでサーバーアプリを開発されている方にはサーバーと連携するiPhoneアプリ作成のイメージをつかんでいただけたのではないかと思います。
ぜひ、Ruby on Railsと連携するiPhoneアプリに挑戦してみてください。
