NiftyCloud mBaaSをSwiftから使う情報がほとんどないので、自分でやってみたメモ書き(その2)です。
UIImageのデータを読み書きしてみました。その他のファイルもNSDataに変換すれば大丈夫だと思います。
ファイルストアはこちら↓のiOSアプリのアプデートで使用予定です。
OnWorkってこんなアプリです
構築や管理の面倒なサーバサイドにNiftyCloud mBaaSを使って、プロントのアプリに集中できるのでいいですね。
##0.環境
Xcode 8.2 + Swift 3
[iOS SDK Version2.0.0] (https://github.com/NIFTYCloud-mbaas/ncmb_ios)
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にアプリケーションキー設定を追加
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
NCMB.setApplicationKey("YOUR_APPKEY",
clientKey: "YOUR_CLIENTKEY")
return true
}
##2.ファイルストアからUIImageデータの読み出し
ファイルストアからファイル名を指定してUIImageを読みだして返す関数の例です。
ファイル名は拡張子なしの名称をもらい拡張子".png"を付加して読みだしていますが、使いやすいように修正してください。
読み出しに失敗するとnilを返します。
/// 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:フォーマットが不正”が出てくれれば。。。
/// 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.その他
ご意見ご要望等あればコメントください。
会員管理については随時投稿予定です。