2016-06-20 5 views
2

В RealmSwift у меня есть Object, Message.переменный сброс до значения по умолчанию в области

Я использую ObjectMapper для отображения его свойств из службы REST. Я также хочу, чтобы локальное свойство, dynamic var read:Bool = false, отслеживало, прочитал ли пользователь сообщение.

try! realm.write({ 
    m.read = true 
}) 

Я могу увидеть значение, обновленное в браузере Realm.

Однако каждый раз, когда я извлекаю объекты из службы, переменная сбрасывается до значения по умолчанию. Я уверен, что я делаю что-то неправильно, но я не уверен, что это вещь RealmSwift или ObjectMapper.

Любая идея?

ответ

0

Моя гипотеза о том, почему это происходит потому, что когда вы запрашиваете объекты с сервера, вы получите JSON, который вы затем карты в новые Message объектов (отличных от предыдущих Message объектов, где ты набором read = true). Эти объекты сообщений инициализируются read = false, а когда они сохраняются в области, значение false перезаписывает ранее сохраненное значение true.

(Насколько я могу судить, ObjectMapper не позволяет взять существующий объект модели и «обновление» или «повторное заполнение» его значение с новым значением JSON.)

Есть несколько вещи, которые вы можете попробовать. Вы можете попробовать получить значения read для всех Message, созданных вами из вашего ответа JSON, и обновить значения read на новых объектах Message, прежде чем вы сохраните их в Царстве. Другим вариантом является сохранение этой информации вне диапазона: создайте новый класс объектов, содержащий только информацию о пользователе (например, идентификатор сообщения и флаг read) и сохраните их в Realm вместе с объектами Message.

+0

Я решил использовать тип RealmOptional . Однако меня все еще интересует, почему это не работает. Полагаю, вы можете быть правы. – suprandr

0

TL; ДР: объявить переменную как это:

@objc dynamic var name : String = "" 

Я использую AlamofireObjectMapper (5.0.0) Realm (3.0.2) RealmSwift (3.0.2) и IOS-11

class Category: Object, Mappable { 
(...) 
    @objc dynamic var name : String = "" 
(...) 
} 

некоторые рассматривают контроллер:

lazy var categories: Results<Category> = { self.realm.objects(Category.self) }() 

без динамических категорий печатает все, кроме categories[indexPath.row].name отпечатков ""

Когда я добавил динамическое объявление переменной, все работало нормально.

Смежные вопросы