App Groupの使用領域にRealmDBを置く_子Classを作る
こんにちは。川上です。
今回は、RealmDB用組み込みモードで、ガリガリと。
(1)親Classに、保存、削除、読み取りI/Fを作る
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | // MARK: ==== Realm共有 親Class class BaseRealm: Object,Identifiable { // ・・・・ // MARK: +++ RealmDB保存用メソッド func save() { // == static var realm: Realm 組み込み try! BaseRealm.realm.write { BaseRealm.realm.add(self, update: .modified); } } // MARK: +++ RealmDB削除用メソッド func delete() { // == static var realm: Realm 組み込み try! BaseRealm.realm.write { BaseRealm.realm.delete(self); } } // delete // MARK: +++ obj_idで DBを取得する === geDbFromOgjID_T () static func geDbFromOgjID_T<Element: Object>(_ type: Element.Type,obj_id:String) -> [Element] { // Realmのインスタンスを取得 var ress:[Element] = [] // プライマリキーを指定してオブジェクトを取得 // Query using an NSPredicate let predicate = NSPredicate(format: "obj_id = %@ ",obj_id) let res = realm.objects(Element.self).filter(predicate) // print(#function + "=== geDbFromOgjID_T() res.count = \(res.count)") for data in res { ress.append(data ) } return ress } // === geDbFromOgjID_T } |
(2)子ClassのメンバにUIImageを保存する
RealmにUIImageを直に保存できないので、Dataに変換して保存するんです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | // MARK: === Imageを設定する class GroundImgDB: BaseRealm { //MARK: === Image保存用データ @objc dynamic private var imagePhtData: NSData? = nil //MARK: === 写真生Imageデータ用 作業用メンバ @objc dynamic private var _imagePhotos: UIImage? = nil @objc dynamic var imagePhotos: UIImage? { set{ let maxImgSz = 15*1024*1024 var quarity:CGFloat = 0.9 var jpegSize = 0 self._imagePhotos = newValue if let value = newValue { //写真はJPEGが良いらしい self.imagePhtData = value.jpegData(compressionQuality: quarity)! as NSData if let data1 = self.imagePhtData { jpegSize = data1.length print("bf: imagePhtData.size = \(jpegSize)") while (quarity > 0 && jpegSize > maxImgSz ) { quarity = quarity - 0.15 self.imagePhtData = value.jpegData(compressionQuality: quarity)! as NSData jpegSize = self.imagePhtData!.length } } print("af: imagePhtData.size = \(jpegSize)") } } get{ if let image = self._imagePhotos { return image } if let data = self.imagePhtData { self._imagePhotos = UIImage(data: data as Data) return self._imagePhotos } return nil } } //MARK: === 新規追加用のインスタンス生成メソッド static func create() -> GroundImgDB { let picturs = GroundImgDB() picturs.regday = NSDate(); //現在時間 return picturs; } //MARK: === 保存しないメンバ override static func ignoredProperties() -> [String] { return ["imagePhotos", "_imagePhotos"] } } // == GroundImgDB |
で、Imageの保存と取得用RealmDBの作成ができた模様。
次回は、RealmModelMgrらしきものを。。
ではでは。