领域:更新属性缓慢

时间:2015-10-31 13:38:10

标签: ios swift realm

在我的应用中,用户可以在集合视图中选择多个联系人。当他选择一个单元格时,该属性被选中"在相应的对象"联系"将设置为true并且collectionview刷新所选单元格:

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
    }
}

当我使用coredata时,大约500毫秒有一个延迟,速度要快得多。有什么我可以获得更多的表现吗?

1 个答案:

答案 0 :(得分:1)

我有类似的问题,毕竟我决定不动态使用$(window).scroll(function(){ if($("#nav-bar").scrollTop() == 0 && $("#nav-bar").css("opacity") != 1 ){ $( "#nav-bar" ).css("opacity", 0.5); }else if( $("#nav-bar").scrollTop() != 0 && $("#nav-bar").css("opacity") != 0.5 ){ $( "#nav-bar" ).css("opacity", 1); } }); (每次用户选择联系时)。

而不是,我决定在我的ViewController中保留对我的联系人对象的引用并更改属性realm.write

isSelected

当用户即将离开您的ViewController时,请勿忘记使用func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { let contact: self.filteredContacts[indexPath.row] contact.isSelected = !contact.isSelected self.collectionView?.reloadItemsAtIndexPaths([indexPath]) } 更新您的联系对象。

整个技巧仅用于realm.write()一次。试着弄明白什么时候这是好时机。

修改 我不认为你可以提高Realm写入事务的性能。这绝对是耗时的,主要是因为文件I / O.