2016-06-28 115 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