2017-03-20 14 views
2

私は、削除する複数のセルを選択できるコレクションビューを持っています。つまり、複数のセルが削除された場合、複数のオブジェクトもセルごとにレルム-1オブジェクト内で削除されます。リスト内のオブジェクトを削除する - スウィフト

私はIntの配列をとり、コレクションビューの選択されたindexPathから読み込まれる関数を持っています。

問題は、私は両方の
1を行うするかどうかはわかりませんということです)レルム内のオブジェクトを削除し、
2)List私のコード

削除されたオブジェクトなしで最新のを持っている:

私はそうのようなインデックスのパスを取得する:

let indexPaths = collectionView.indexPathsForSelectedItems

これがために私の機能でありますindexPathsを取り込み、Listを更新し、レルム内のオブジェクトを削除します。オブジェクトが削除されていないため、現在は機能していません。私はremoveAllが何も削除しないことに気づいた。

func removeVideos(at indexes: [Int]) { 
     let newVideos = List<Video>() 
     for (index, video) in favorite!.videos.enumerated() { 
      if !indexes.contains(index) { 
       newVideos.append(video) 
      } 
     } 

     let realm = try! Realm() 
     try! realm.write { 
      favorite!.videos.removeAll() 

      newVideos.forEach { newVideo in 
       favorite!.videos.append(newVideo) 
      } 
     } 
    } 

私はそうのように、その関数を呼び出します。

removeVideos(at: indexPaths.map { $0.item })

任意の考え?

答えて

6

List.removeAll()レルムからオブジェクトを削除しません。これは、そのオブジェクトを親オブジェクト(この場合はfavoriteオブジェクト)との関係を削除して、そのListオブジェクトから削除します。親のListオブジェクトと共にオブジェクトを削除することは、「カスケード削除」と呼ばれる機能であり、レルムGitHubのit's still being discussedです。

実際に削除したい場合は、realm.delete(favorite!.videos)と呼んでください。これにより、Realmからそれらが削除され、Listプロパティが自動的に消去されます。

あなたの実装には注意が必要な場合があります。レルムからObjectが削除されると、レルムへの既存の参照はレルムに再追加できません。 List全体を削除するのではなく、newVideoオブジェクト自体を削除することが適切な場合もあります。

func removeVideos(at indexes: [Int]) { 
    let newVideos = [Video]() 
    for (index, video) in favorite!.videos.enumerated() { 
     if !indexes.contains(index) { 
      newVideos.append(video) 
     } 
    } 

    let realm = try! Realm() 
    try! realm.write { 
     realm.delete(newVideos) 
    } 
} 

限り、あなたはあなたのコレクションビューでのレルム通知ブロックを設定してきたように、これはあなたがそれらをあなたのUIから削除するために行うために必要なすべてでなければなりません。

+0

すばらしい説明!あなたは、他の人を助けることに関しては、ソフトウェア開発の全てにおいて最高の人物です - いつも明確で直接的な回答を素敵なやり方で提供してくれてありがとうございます。) – JEL

+0

クイックフォローアップはユーザーによって開始されているので、通知ブロックを使用するか、またはRealmの 'Interface-Driven Write'を使用して選択したセルを削除しますか? – JEL

+0

こんにちはTimさん、これを見てみることができますか(Realmのサンプルコードは表示されません):http://stackoverflow.com/questions/42988499/realm-object-level-notifications- inside-uicollectionviewcells – JEL

関連する問題