Ruby on Railsで構築したサーバーと連携してデータを表示するiPhoneアプリを作ります。iPhone編の本稿では今回作成するiPhoneアプリの実装方法について解説します。
はじめに
Ruby on Railsサーバーアプリと連権するiPhoneアプリを超簡単に書けるObjectiveResourceに付いて書かせて頂きます吉田裕美です、宜しくお願いいたします。
この記事は、iPhoneアプリを開発には詳しくないWebアプリを主に開発しているプログラマーと、Webアプリの開発には詳しくないiPhoneアプリのプログラマー両方の方に読んでいただけるよな構成になっています。
- iPhone開発経験者の方は
- iPhone編(本稿)は「ObjectiveResourceとは」を読んだら「iPhone開発入門は」さっと目を通し、
- Ruby on Rails編はじっくりと読んでください。
- Ruby on Rails開発経験者の方は
- iPhone編(本稿)はじっくりと読んでください。
- Ruby on Rails編はRuby on Railsとは」と「Ruby on Rails開発入門」さっと目を通し「ObjectiveResourceを使う」を読んでください。
ObjectiveResourceとは
ObjectiveResourceはホームページに、
ObjectiveResource is a framework for the iPhone that makes
interacting with Ruby on Rails applications dead simple.
と書かれているように、iPhoneアプリとRuby on Railsで作られたサーバーアプリを超簡単に連携するフレームワークです。iPhone SDKにあるAPIだけ使ってサーバーと連携する場合、サーバー側にはXMLやJSONでやり取りができるサービスを構築し、iPhone側からはHTTPプロトコルを使い情報を送ったり、受け取ったりします。
例えばiPhone側でHTTPプロトコルを使った通信を行うには、以下のようなコードを書く必要がります。
- NSURLRequestでリクエストを作成
- NSURLConnectionで通信
- 通信エラーの処理
- 受信XMLデータをパース。XMLのパースにはNSXMLParserを使ったSAX風パーサーを書く必要があります。また、JSONを使う場合は、iPhone SDKにはJSONライブラリが無いので、オープンソースのライブラリを探してくる必要があります。
ObjectiveResourceは、こういった面倒なサーバーとの通信処理を、データをやり取りするためのシンプルなクラスを用意するだけ実現できます。
以下は、TODO、いつ(due)、何を(task)行うかの情報をObjectiveResourceを使って通信する際に用意するTodoクラスのインターフェース定義です(コードの詳細は後述します)。データを格納するだけのシンプルなクラスを定義し、そこにObjectiveResourceのヘッダーファイルをimportし、オブジェクトのIDを格納するインスタンス変数、ここではtodoIdを追加しただけです。
#import <Foundation/Foundation.h>
#import "ObjectiveResource.h"
@interface Todo : NSObject {
NSString *todoId;
NSDate *due;
NSString *task;
}
@property (nonatomic , retain) NSString *todoId;
@property (nonatomic , retain) NSDate *due;
@property (nonatomic , retain) NSString *task;
@end
@implementation Todo
@synthesize todoId, due, task;
- (void) dealloc
{
[todoId release];
[due release];
[task release];
[super dealloc];
}
@end
なお、以下のようなサーバーの情報を与える初期設定を書くだけで、アプリがアクセスするサーバーを指定できます。
[ObjectiveResourceConfig setSite:@"http://localhost:3000/"];
また、サーバーから全Todoデータを取得するには以下のように記述し、
NSArray *todos = [Todo findAllRemote];
新規データをサーバーに登録するには以下のように記述するだけで簡単に行えます。
Todo *todo = [[Todo alloc] init]; todo.due = [NSDate date]; todo.task = @"コンサートの予約"; [todo saveRemote];
この記事は参考になりましたか?
- iPhone+Ruby on Rails連携テクニック連載記事一覧
-
- iPhone とRuby on Railsを超簡単に連携する ObjectiveResou...
- iPhoneとRuby on Railsを超簡単に連携する ObjectiveResour...
- この記事の著者
-
吉田裕美(ヨシダユウミ)
有限会社 EY-Office 取締役CADのベンチャー企業でCADのコア部分や図面管理システムなどの開発に従事した後、独立しJava,Ruby,PerlでWebアプリを中心に開発してきた。現在は殆どの開発はRuby on Rails。ここ数年はソフトウェアエンジニアの教育に興味をもち、従来の知識偏重な教育ではなく現実の問題を解決できるエンジニアを育てる教育に注力している。またLisp等に関心...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
