29054


Realmの1対多構造を作成し、レコードにユーザのオブジェクトIDと関連づいた辞書型配列をNSDataに変換したものを保存しております。ただ、関連づいたNSDataを取得、NSDataをアンアーカイブする方法がわかりません。

[code]

    class UserClass: Object {
        dynamic var id = 0
        dynamic var user: String = ""
        let colorData = List<Color>()
        override static func primaryKey() -> String? {
            return "user"
        }
    }
    
    class VariousColor: Object {
        dynamic var colorData = NSData()
        let chidLink = LinkingObjects(fromType: UserClass.self, property: "colorData")
    }
    
[/code]

以下表示ViewController

[code]

    class ViewController: UIViewController {
        override func viewDidLoad(){
            let realm = try! Realm()
            try! realm.write {
                let usrClass = UserClass()
                usrClass.user = (PFUser.currentUser()?.objectId)!
                let varColor = VariousColor()
                varColor.colorData = NSKeyedArchiver.archivedDataWithRootObject(self.colorDictionary)
                usrClass.colorData.append(varColor)
                realm.add(usrClass, update: true)
                print(varColor.colorData)
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2016-09-21T03:19:09.290
29017
2016-09-22T10:25:44.503
2016-09-22T10:15:58.670
5519
13782
question
swift ios realm
Realm １対多　構造でのNSData取得について


例えば保存したオブジェクトの取得と、NSDataから元のディクショナリを復元する処理は下記のようになります。

[code]

    if let user = realm.objectForPrimaryKey(UserClass.self, key: "...") {
        for color in user.colorData {
            let colorDictionary = NSKeyedUnarchiver.unarchiveObjectWithData(color.colorData)
            print(colorDictionary)
        }
    }
    
[/code]

ここではプライマリキーを使って保存したオブジェクトを取得しています。

[code]

    realm.objectForPrimaryKey(UserClass.self, key: "...")
    
[/code]

任意の検索条件でオブジェクトを取得するには以下のようにします。

[code]

    realm.objects(UserClass.self).filter("user = %@", "...")
    
[/code]

あとは通常のオブジェクトを使うのと同様で、この例ではオプショナルをアンラップし、`user.colorData`を１件ずつループして、それぞれを元のディクショナリに復元しています。

[code]

    let colorDictionary = NSKeyedUnarchiver.unarchiveObjectWithData(color.colorData)
    
[/code]

復元の処理は^です。


CC BY-SA 3.0
2016-09-22T10:25:44.503
29054
2016-09-22T10:25:44.503
5519
29017
answer