Swift中的境界一对多关系

时间:2016-07-20 13:14:31

标签: swift realm

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

 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)
     }
 }

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

1 个答案:

答案 0 :(得分: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)
       }
   }

如果有人要添加的话请做。感谢