ニフクラmBaaSお役立ちブログ

スマホアプリ開発にニフクラmBaaS。アプリ開発に役立つ情報をおとどけ!

mBaaSを使ったデモアプリの紹介(データストア編)

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を使ってみてください!

mBaaSでサーバー開発不要! | ニフティクラウド mobile backend