mBaaSはサーバサイドの仕組みになりますので、どういったものなのかは一度体験してみないと分かりづらいでしょう。そこで今回はニフティクラウド mobile backendを使ったデモアプリの紹介です。各機能ごとにミニマムにまとめてありますのでコードを見ればすぐに理解できるかと思います。
Todoアプリ
データストアはいわばクラウドのデータベースです。NoSQL型でデータ構造をあらかじめ決める必要がありません。クラス(データベースで言うところのテーブル)がなければ自動的に生成されますし、カラムも型を指定する必要もありません。
今回はごく簡単なTodoアプリの紹介です。コードはSwift 1.2系で書かれています。リポジトリはmoongift/NCMBiOSTodoにあります。まずはリポジトリをクローンします。
$ git clone git@github.com:moongift/NCMBiOSTodo.git
利用の際にはCocoaPodsを使いますのでインストールします。
$ [sudo] gem install cocoapods $ pod install
終わったら NCMBiOS_Todo.xcworkspace を開きます。
設定を変更する
Xcodeが開いたら NCMBiOS_Todo/Settings.swift
を開きます。
// アプリケーションキー let kNCMBiOSApplicationKey = "YOUR_APPLICATION_KEY" // クライアントキー let kNCMBiOSClientKey = "YOUR_CLIENT_KEY"
と書かれていますので、ニフティクラウド mobile backendのアプリケーションキーとクライアントキーに変更してください。アプリケーションキーとクライアントキーはmBaaSの管理画面より取得ができます。
ビルドする
後はビルドするだけです。完了するとタスクの一覧画面(まだ何もありません)が表示されます。
+をタップします。そうすると新しいタスクの入力画面に遷移します。
タスク名を入力したら追加をタップします。
登録されました。
さらにタスク名をタップすると編集画面になります。
左にスワイプすると削除が出ます。
mBaaSを使っているところ
タスクの追加、一覧取得、削除は NCMBiOS_Todo/MasterViewController.swift
にて行っています。
追加処理
func addTodoWithTitle(title: String) { let todo = Todo.object() as! Todo todo.setObject(title, forKey: "title") // 非同期で保存 todo.saveInBackgroundWithBlock { (error: NSError!) -> Void in if(error == nil){ println("新規TODOの保存成功。表示の更新などを行う。") self.insertNewTodoObject(todo) } else { println("新規TODOの保存に失敗しました: \(error)") } } }
一覧取得
func fetchAllTodos() { let query = Todo.query() // タイトルにデータが含まれないものは除外(空の文字列は除外されない) query.whereKeyExists("title") // 登録日の降順で取得 query.orderByDescending("createDate") // 取得件数の指定 query.limit = 20 query.findObjectsInBackgroundWithBlock({(NSArray todos, NSError error) in if (error == nil) { println("登録件数: \(todos.count)") for todo in todos { let title = todo.title println("--- \(todo.objectId): \(title)") } self.objects = todos as! [Todo] // NSArray -> Swift Array self.tableView.reloadData() } else { println("Error: \(error)") } }) }
削除
if editingStyle == .Delete { let todo = objects[indexPath.row] as NCMBObject let objectID = todo.objectId let query = Todo.query() query.getObjectInBackgroundWithId(objectID, block: { (object: NCMBObject!, fetchError: NSError?) -> Void in if fetchError == nil { // NCMBから非同期で対象オブジェクトを削除します object.deleteInBackgroundWithBlock({ (deleteError: NSError!) -> Void in if (deleteError == nil) { let deletedObject = self.objects.removeAtIndex(indexPath.row) // データソースから削除 tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) } else { println("削除失敗: \(deleteError)") } }) } else { println("オブジェクト取得失敗: \(fetchError)") } }) :
mBaaSを使うとローカルでしか使えなかったアプリにインターネットによるデータの保存、共有、公開といった新しい魅力を追加することができます。ぜひコードを参考にmBaaSを使ってみてください!