大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

App Groupの使用領域にRealmDBを置く_子Classを作る

著者:川上洋
公開日:2021/11/04
最終更新日:2021/11/04
カテゴリー:技術情報 雑記
タグ:

こんにちは。川上です。

今回は、RealmDB用組み込みモードで、ガリガリと。

(1)親Classに、保存、削除、読み取りI/Fを作る

// 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に変換して保存するんです。

 
// 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らしきものを。。

ではでは。

    上に戻る