2016-07-20 104 views
0

我刚刚在Swift和Realm开始开发。我有一个看起来像这样的境界对象:Swift领域中的一对多关系

class PersonItem: Object 
{ 
    dynamic var Id = "" 
    dynamic var Name = "" 
    dynamic var LastName = "" 
} 
class PersonDetailsItem: Object 
{ 
    dynamic var Id = "" 
    dynamic var JobDescription = "" 
    var ImagesArray = List<ImageItem>() 
} 

另一个看起来像这样:

class ImageItem: Object 
{ 
    dynamic var base64String = "" 
} 

我有一个的tableView显示的人物项的列表。在didSelectItemAtIndexPath我调用一个方法来获取每个项目的细节。现在,当我从服务器接收数据时,我得到了一组base64编码的图像。我试图将它们保存在图像列表中,以便我可以在离线状态下检索它们,而且我似乎无法使其正常工作。这是我试过的其中一件事

try! realm.write{ 
for obj in self.imagesArray //the array with the images from server 
{ 
    let image = ImageItem() 
    image.base64String = obj as! String 
    personDetailsItem.ImagesArray.append(image) 
} 

let items = realm.objects(PersonDetailsItem) 
if items.count > 0 
{ 
    for obj in items 
    { 
     if obj.valueForKey("Id") as? String == personItem.Id 
     { 
     realm.add(personDetailsItem, update: true) 
     return 
     } 
    } 
    realm.add(personDetailsItem) 
    } 
    else 
    { 
     realm.add(personDetailsItem) 
    } 
} 

结果:在所有的项目中都保存了我打开的第一个项目中的图像。我在这里错过了什么?任何帮助将非常感激。 谢谢

回答

0

嗯,我应该把我的脚在我的嘴:)。问题不在于我写他们的方式,而在于我读他们的方式。代码的作品,但我最终使用不同的解决方案更清晰:

try! realm.write 
    { 
     for obj in self.imagesArray 
     { 
      let image = ImageItem() 
      image.base64String = obj as! String 
      personDetailsItem.imagesArray.append(image) 
     } 
     if realm.objectForPrimaryKey(PersonDetailsItem.self, key: personDetailsItem.Id) == nil 
     { 
      realm.add(personDetailsItem) 
     } 
     else 
     { 
      realm.add(personDetailsItem, update: true) 
     } 
    } 

如果有人有东西要添加,请做。谢谢