В моем приложении пользователь может выбрать несколько контактов в коллекции. Когда он выбирает ячейку свойство «IsSelected» на соответствующем объекте «контакт» будет установлен верно и CollectionView обновляет выбранную ячейку:Realm: Обновление свойства slow
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let contact: self.filteredContacts[indexPath.row]
self.invertSelectionStatusOfContact(contact)
self.collectionView?.reloadItemsAtIndexPaths([indexPath])
}
func invertSelectionStatusOfContact(contact:Contact){
try! self.realm.write {
contact.isSelected = !contact.isSelected
}
}
Там есть задержка со всего 500мс, который был намного быстрее, когда я использовал coredata. Есть ли что-то, что я могу, чтобы повысить производительность?
Но вне транзакции с записью это приводит к сбою? -> Попытка изменить объект за пределами транзакции записи - сначала вызовите beginWriteTransaction в экземпляре RLMRealm. – netshark1000
Извините, я забыл, что вы не можете редактировать объект Realm вне 'Write Transaction'. Дело в том, чтобы создать новые объекты Realm ('Contact()') и использовать его. А затем замените старый на новый, обновленный. Меня устраивает. Насколько я помню, используя Swift, вы должны инициализировать новый объект с параметром: 'updates: true' (если вы используете первичный ключ). Надеюсь, это поможет. Дайте мне знать, если у вас возникнут проблемы. – zuziaka
Вы должны убедиться, что ваш объект «Контакт» имеет первичный ключ в этом случае. Кроме того, вы также можете управлять изменениями в состояниях выбора в словаре. Пакетная запись в более крупные транзакции, как правило, очень хорошая идея с Realm. – marius