2016-06-28 1 views
0

У меня есть таблица для избранных, и я хочу, чтобы очистить таблицу всех данных, а затем перезагрузить ее содержимым массива. Вот код:Почему очищающее содержимое таблицы realm недействительно?

//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“, причина:„ Объект был удален или признан недействительным“»

Swift кажется, удаляет мой объект (который является таблицей), когда все строки удаляются, но я просто хочу очистить все данные. Как я могу обойти это?

+0

Какая строка вызывает сбой –

+0

приложение сработает ..... оно удаляет элементы из таблицы FavouriteesRealm, а затем я думаю, что это зависает на .... let FavouriteRealm = FavouritesRealm() – kangarooChris

ответ

0

Realm использует подход с нулевой копией, в котором вы получаете обновляемые объектные объекты доступа, которые непосредственно получают доступ к данным с отображением памяти вместо копий.

Основываясь на сообщении об ошибке, я предполагаю, что объекты в favouritesArray управляются объектами Realm. Если это так, их не нужно будет воссоздавать. Управляемые объекты могут быть изменены только в транзакции записи, что означает, что все ваши изменения сохраняются. Вместо того чтобы пытаться удалить все объекты, а затем повторно добавить избранное, в вашем случае может быть проще удалить только те объекты, которые больше не используются.

Если этот массив содержит автономные объекты, которые не были добавлены в царство но и управляемые объекты, которые уже добавлены в Realm, то add(:_ update: true) может облегчить добавление или обновление ваших объектов, если у них есть первичный ключ.

+0

вы правы , favouritesArray является объектом Realm. для удаления элементов работает отлично, как вы сказали. Тем не менее, на самом деле я хочу добиться повторного упорядочения массива в результате этого: переопределить func tableView (tableView: UITableView, var moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath). – kangarooChris

+1

Я бы рекомендовал использовать отношение «ко многим» (по образцу «Список») для управления порядком объектов. Вам нужно будет ввести дополнительный класс модели для этого, хотя и поддерживает эти отношения. – marius