FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

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

Swift × iOS SDKでTodoアプリを作る(ベース)

f:id:mbaasdevrel:20180806093819p:plain

今回はiOS SDKを使いつつ、既存のTodoアプリのデータ保存をmBaaSに置き換える方法を紹介します。元にしたTodoアプリはSwiftで簡単なTODOアプリを作ってみよう - Qiitaです。

iOS SDKをインストールする

iOS SDKのインストールについては前回の記事を参考にしてください。この記事と同じように cocoapods-keys を使っています。

NCMBを初期化する

初期化は AppDelegate.swift で行います。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
  // Override point for customization after application launch.
  NCMB.setApplicationKey(keys.applicationKey , clientKey: keys.clientKey)
  return true
}

データの追加を置き換える

元々あった var TodoKobetsunonakami = [String]() は不要なのでコメントアウトします。

// var TodoKobetsunonakami = [String]()

そして追加するをタップした時の処理を置き換えます。

let obj = NCMBObject(className: "todoClass")
obj?.setObject(TodoTextField.text!, forKey: "todo")
obj?.saveInBackground({(err) in
  if err != nil {
  } else {
    self.performSegue(withIdentifier: "toList", sender: nil)
  }
})

データの保存は非同期処理になるので、保存した後で画面遷移を行うようにしています。

データを読み込む

ViewController.swift では初期表示時にデータを読み込みます。これは画面が戻ってきた時にも使われます。

override func viewDidLoad() {
  super.viewDidLoad()
  let query = NCMBQuery(className: "todoClass")
  query?.findObjectsInBackground({(objects, err) in
    if err != nil {
    } else {
      self.todos = objects as! [NCMBObject]
      self.todosView?.reloadData()
    }
  })
}

ViewController では二つの変数を定義しておきます。 todosView はTodoを表示するTableView、そしてtodosはmBaaSから返ってきたデータを保存しておく変数です。

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { 
    @IBOutlet weak var todosView: UITableView!
    var todos = [NCMBObject]()
    // 省略
}

mBaaSからのデータ取得は非同期なので self.todosView?.reloadData() を使って表示を更新しておきます。

データを表示する

データの表示はさほど変わりませんが、mBaaSの場合は object メソッドでデータを取り出す必要があります。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  let TodoCell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "todoCell", for: indexPath)
  TodoCell.textLabel!.text = (self.todos[indexPath.row] as! NCMBObject).object(forKey: "todo") as! String
  return TodoCell
}

f:id:mbaasdevrel:20180806094142p:plain

まとめ

ここまでの処理でTodoアプリのデータ保存をmBaaSに置き換えられました。次回以降、これをベースにしてさらにmBaaSらしい機能を追加していきます。

今回のソースコードは goofmint/NCMB-Swift-iOS-Todo にアップしてあります。実装時の参考にしてください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。