LoginSignup
12
13

More than 5 years have passed since last update.

NiftyCloud mBaaS + Swift データストアへの読み書き

Last updated at Posted at 2016-01-28

NiftyCloud mBaaSをSwiftから使う情報がほとんどないので、自分でやってみたメモ書きです。
こちら↓のiOSアプリで使ってみました。
OnWorkってこんなアプリです

0.環境

 Xcode 8.2 + Swift 3
 iOS SDK Version2.0.0

Swift3用に書き直しました
 

1.準備

 1) iOS用SDKを組み込む
 2) bridge-headerを準備

//  NCMB-bridge-header.h

#ifndef NCMB_bridge_header_h
#define NCMB_bridge_header_h

#import "NCMB/NCMB.h"

#endif /* NCMB_bridge_header_h */

 3 ) AppDelegateにアプリケーションキー設定を追加

Swift
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        NCMB.setApplicationKey("YOUR_APPKEY",
            clientKey: "YOUR_CLIENTKEY")

        return true
    }

2.データストアからの読み出し

下記のクラスからcompanyIDをキーにしてcompanyNameを読みだして返す関数の例です。
クラス名:Company
フィールド:companyID 会社のID
フィールド:companyName 会社の名前

Swift3
/// get name of the company
///
/// - parameter companyID: company ID with String
/// - returns: companyName with String
func getCompanyName(_ companyID:String) -> String {
    var companyName:String = ""

    let query = NCMBQuery(className: "Company")
    query?.whereKey("companyID", equalTo: companyID)
    var results:[AnyObject] = []
    do {
        results = try query!.findObjects() as [AnyObject]
    } catch  let error1 as NSError  {
        print("\(error1)")
        return companyName
    }
    if results.count > 0 {
        let result = results[0] as? NCMBObject
        companyName = result?.object(forKey:"companyName")  as? String ?? ""
    }
    return companyName

}

3.データストアへの追加

下記のクラスへレコードを書き込む(追加する)関数の例です。
クラス名:Company
フィールド:companyID 会社のID
フィールド:companyName 会社の名前

  • companyInfoはcompanyID, companyNameを含む構造体として定義してあります
Swift3
/// add company record to Company Class
///
/// - parameter : companyInfo
/// - returns:  nothing
func addCompany(_ company:companyInfo) {

    let companyObject = NCMBObject(className: "Company")

    companyObject?.setObject(company.companyName,forKey:"CompanyName")
    companyObject?.setObject(company.companyID,forKey:"companyID")

    companyObject?.saveInBackground({(error) in
        if error != nil {print("Save error : ",error!)}
    })

}

4.データストアの更新

下記のクラスからcompanyIDをキーにして登録済みのレコードのcompanyNameを更新する関数の例です。
クラス名:Company
フィールド:companyID 会社のID
フィールド:companyName 会社の名前

  • companyInfoはcompanyID, companyNameを含む構造体として定義してあります

* フィールドのデータを初期化したい場合はnilを設定すれば良いらしいです。
 管理画面から見ると(undefined)には戻りませんが等価の扱いということです。
 ただし、位置情報フィールドは初期化不可。

参照: https://github.com/NIFTYCloud-mbaas/UserCommunity/issues/272

Swift3
/// update Company record of Company Class
///
/// - parameter : companyInfo
/// - returns:  nothing
func updateCompany(_ company:companyInfo) {

    let query = NCMBQuery(className: "Company")
    query?.whereKey("companyID", equalTo: company.companyID)
    var results:[AnyObject] = []
    do {
        results = try query!.findObjects() as [AnyObject]
    } catch  let error1 as NSError  {
        print("\(error1)")
        return
    }
    if results.count > 0 {
        let obj = results[0] as! NCMBObject

        obj.setObject(company.companyName,forKey:"CompanyName")

        obj.saveInBackground({(error) in
            if error != nil {print("Save error : ",error!)}
        })

    }
}

5.その他

ご意見ご要望等あればコメントください。
ファイルストアと会員管理については随時投稿予定です。

12
13
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13