LoginSignup
11
11

More than 5 years have passed since last update.

NiftyCloud mBaaS + Swift ファイルストアへの読み書き

Last updated at Posted at 2016-01-28

NiftyCloud mBaaSをSwiftから使う情報がほとんどないので、自分でやってみたメモ書き(その2)です。
UIImageのデータを読み書きしてみました。その他のファイルもNSDataに変換すれば大丈夫だと思います。

ファイルストアはこちら↓のiOSアプリのアプデートで使用予定です。
OnWorkってこんなアプリです
構築や管理の面倒なサーバサイドにNiftyCloud mBaaSを使って、プロントのアプリに集中できるのでいいですね。

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.ファイルストアからUIImageデータの読み出し

ファイルストアからファイル名を指定してUIImageを読みだして返す関数の例です。
ファイル名は拡張子なしの名称をもらい拡張子".png"を付加して読みだしていますが、使いやすいように修正してください。
読み出しに失敗するとnilを返します。

Swift3
/// Read ImageData to File Store
///
/// - parameter : name of data as String
/// - returns:  image with UIImage

func getStampImage(_ name:String) -> UIImage? {

    var image:UIImage? = nil
    var imageData:Data?
    let fileName = name + ".png"

    let file:NCMBFile = NCMBFile.file(withName: fileName ,data: nil ) as! NCMBFile

    do {
        imageData = try file.getData()
    } catch  let error1 as NSError  {
        return image
    }
    image = UIImage(data: imageData!)

    return image

}

3.ファイルストアへUIImageデータの追加

ファイルストアへファイル名を指定してUIImageを書き込む関数の例です。
ファイル名は拡張子なしの名称をもらい拡張子".png"を付加して書き込んでいますが、使いやすいように修正してください。
*ACLは設定しなくても大丈夫です。

* ファイル名には"/"を使えませんが、誤って使用してしまうと、エラー種別が”E404002:該当サービスなし”となりびっくりします。
私はファイル名を日付データにしようとして"/"を使ってしまいこのエラーとなり、原因がわからずハマりました。
せめて”E400004:フォーマットが不正”が出てくれれば。。。

Swift3
/// add ImageData to File Store
///
/// - parameter : image as UIImage, name of data as String
/// - returns:  nothing
func setStampImage(_ image:UIImage,name:String) {    
    // imageをNSDataに変換
    let imageData:Data = NSData(data: UIImagePNGRepresentation(image)!) as Data
    let fileName = name + ".png"
    let file:NCMBFile = NCMBFile.file(withName: fileName ,data: imageData) as! NCMBFile
    let acl = NCMBACL()
    // 全員に読み書き可とする
    acl.setPublicReadAccess(true)
    acl.setPublicWriteAccess(true)
    file.acl = acl

    var error1 : NSError?
    file.save(&error1)
    if error1 != nil  {
        print("Image data save error : ",error1!)
    }
}

4.ファイルストアの更新

ファイルストアはファイル名を指定して書き込んだ場合に既存のファイルを上書きするようです。
上の関数でそのまま更新できました。

5.その他

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

11
11
0

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
11
11