Realmを使い、アプリ本体で選択した画像をTodayExtensionに表示させるようにする
現在、テキストの場合はtodayExtenionに表示させることができるのですが、画像に関しては、TodayExtension上ではnilになってしまいます。
テキストの場合のコード(extension上で表示されます)
ViewController
1 var config = Realm.Configuration() 2 let url = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.yumaruApp.widget")! 3 config.fileURL = url.appendingPathComponent("db.realm") 4 let realm = try! Realm(configuration: config) 5 6 try! realm.write { 7 realm.create(MyModel.self, value: ["id": 0, "imageTitle": widgetData.imageTitle], update: true) 8 }
TodayViewController
1 var config = Realm.Configuration() 2 let url = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.yumaruApp.widget")! 3 config.fileURL = url.appendingPathComponent("db.realm") 4 let realm = try! Realm(configuration: config) 5 let result = realm.object(ofType: MyModel.self, forPrimaryKey: 0) 6 label.text = result?.imageTitle
画像の場合のコード(todayextension上ではnilになる)
viewController
1 var config = Realm.Configuration() 2 let url = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.yumaruApp.widget")! 3 config.fileURL = url.appendingPathComponent("db.realm") 4 let realm = try! Realm(configuration: config) 5 6 try! realm.write { 7 realm.create(MyModel.self, value: ["id": 0, "widgetImage": widgetData.widgetImage], update: true) 8 }
TodayViewController
1 var config = Realm.Configuration() 2 let url = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.yumaruApp.widget")! 3 config.fileURL = url.appendingPathComponent("db.realm") 4 let realm = try! Realm(configuration: config) 5 let result = realm.object(ofType: MyModel.self, forPrimaryKey: 0) 6 imageview.image = result?.widgetImage
確認できていること
viewcController上では、画像が下記のように入っているが、
viewController
1(lldb) po widgetData.widgetImage 2▿ Optional<UIImage> 3 - some : <UIImage: 0x600000024bd0> size {824, 828} orientation 0 scale 1.000000
TodayViewController上では、下記のようにnilになってしまいます。
TodayViewController
1(lldb) po result?.widgetImage 2nil
解決方法を教えてくださると幸いです。
###追記
テキストの場合はこのように表示されます。
TodayViewController
1po result?.imageTitle 2▿ Optional<String> 3 - some : "テスト"
###追記
MyModelにData型をUIImageに変換するコードを書いています.
このように書いているため、Data型⇄UIImage型の変換するコードをviewControllerに記述することなく、保存、読み込みを行うことを可能にしています。
MyModel
1import Foundation 2import RealmSwift 3 4final class MyModel: Object { 5 6 static let realm = try! Realm() 7 8 @objc dynamic var id:Int = 0 9 @objc dynamic var imageTitle: String = "" 10 @objc dynamic var subImageTitle: String = "" 11 @objc dynamic private var _widgetImage: UIImage? = nil 12 @objc dynamic var widgetImage: UIImage? { 13 set { 14 self._widgetImage = newValue 15 if let value = newValue{ 16 self.imageData = value.jpegData(compressionQuality: 1) 17 } 18 } 19 get { 20 if let image = self._widgetImage{ 21 return image 22 } 23 if let data = self.imageData{ 24 self._widgetImage = UIImage(data: data) 25 return self._widgetImage 26 } 27 return nil 28 } 29 } 30 @objc dynamic private var imageData: Data? = nil 31 32 override static func primaryKey() -> String? { 33 return "id" 34 } 35 override static func ignoredProperties() -> [String]{ 36 return ["widgetimage", "_widgetImage"] 37 } 38 static func lastId() -> Int{ 39 if let widgetData = realm.objects(MyModel.self).sorted(byKeyPath: "id", ascending: true).last{ 40 return widgetData.id + 1 41 }else{ 42 return 0 43 } 44 } 45 static func creat() -> MyModel{ 46 let widgetData = MyModel() 47 widgetData.id = lastId() 48 return widgetData 49 } 50 func delete(number: Int){ 51 let result = MyModel.realm.objects(MyModel.self).filter("id = (number)") 52 try! MyModel.realm.write { 53 MyModel.realm.delete(result) 54 } 55 } 56 func save(){ 57 try!MyModel.realm.write{ 58 MyModel.realm.add(self) 59 } 60 } 61 static func loadAll() -> [MyModel]{ 62 let widgetDatas = realm.objects(MyModel.self).sorted(byKeyPath: "id", ascending: true) 63 var array: [MyModel] = [] 64 for widgetData in widgetDatas{ 65 array.append(widgetData) 66 } 67 return array 68 } 69}
補足情報(FW/ツールのバージョンなど)
swift4
realm3.15
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/05/29 15:24
2019/05/31 00:40