2016-06-28 71 views
0

我有一个收藏夹表,我想要做的是清除所有数据的表,然后重新加载一个数组的内容。下面是代码:为什么清除领域表的内容使对象失效?

//empty FavouritesRealm table and reload favouritesArray back into FavouritesRealm 
    let clearTable = realm.objects(FavouritesRealm) 
    try! realm.write{ 
     for row in clearTable{ 
      realm.delete(row) 
     } 

     for f in favouritesArray{ 
      let favouriteRealm = FavouritesRealm() 
      favouriteRealm.name = f.name 
      favouriteRealm.price = f.price 
      favouriteRealm.dbSource = f.dbSource 
      favouriteRealm.date = f.date 
      favouriteRealm.favourite = f.favourite 
      realm.add(favouriteRealm) 
     } 
    } 

现在,应用程序崩溃,并评论:“由于未捕获的异常‘RLMException’,原因终止应用程序:‘对象已被删除或无效’”

斯威夫特似乎删除我的对象(这是表)删除所有行时,但我只想清除所有数据。我怎样才能解决这个问题?

+0

什么行导致崩溃 –

+0

应用程序崩溃.....它确实从FavouriteesRealm表中删除项目,然后我想它挂在.... let FavouriteRealm = FavouritesRealm() – kangarooChris

回答

0

领域使用零拷贝方法,您可以检索直接访问内存映射数据而不是副本的实时更新对象访问器。

根据错误消息,我假定favouritesArray中的对象是托管的Realm对象。如果是这样的话,就不需要重新创建它们。托管对象只能在写入事务中修改,这意味着您的所有更改都会保留。而不是尝试删除所有对象,然后重新添加收藏夹,在您的情况下删除不再有利的对象可能会更容易

如果此数组包含独立对象,但未将其添加到Realm还有已经添加到Realm中的托管对象,那么add(:_ update: true)可以方便地添加或更新对象(如果它们具有主键)。

+0

你是对的favouritesArray是一个Realm对象。删除项目工作正常,如你所说。然而,我真正想要实现的是重新排序数组作为此结果:重写func tableView(tableView:UITableView,var moveRowAtIndexPath sourceIndexPath:NSIndexPath,toIndexPath destinationIndexPath:NSIndexPath)。 – kangarooChris

+1

我建议使用一个多对多的关系(用List来建模)来管理对象的顺序。你需要引入一个额外的模型类,虽然它保存了这种关系。 – marius