2016-09-06 6 views
0

私は、最古から最新の順に約10個のセルをリストしたテーブルビューを持っています。 「編集モード」をオンにしてセルを削除すると、すべてが正しく動作するように見えます。編集モードでは、テーブルの順序を整えた後に間違ったセルが削除されます

しかし、私はこれらの細胞を様々な性質に基づいて異なる順序で使ういくつかの機能を作りました。これらの異なる並べ替え順序で編集モードを使用すると、間違ったセルが削除されるように見えます。

ここに私の並べ替え機能のコードです。

func sortPokemonListbyAveIV(){ 
     self.pokemonList.sortUsingComparator{ 
      (obj1: AnyObject, obj2: AnyObject) -> NSComparisonResult in 
      let first = obj1 as! NSDictionary 
      let second = obj2 as! NSDictionary 
      var firstIVRange = "" 
      var secondIVRange = "" 
      if((first["iv"] as! String).containsString("Sorry")){ 
       firstIVRange = "IV: 1 - 2%" 
      } else { 
       firstIVRange = (first["iv"] as! String).stringByReplacingOccurrencesOfString("--", withString: "-") 
      } 
      if((second["iv"] as! String).containsString("Sorry")){ 
       secondIVRange = "IV: 1 - 2%" 
      } else { 
       secondIVRange = (second["iv"] as! String).stringByReplacingOccurrencesOfString("--", withString: "-") 
      } 
      // let firstIVRange = first["iv"] as! String 
      // let secondIVRange = second["iv"] as! String 
      let firstAveIV = self.avgIV(firstIVRange) 
      // print(firstIVRange) 
      let secondAveIV = self.avgIV(secondIVRange) 
      let result = firstAveIV - secondAveIV 
      return (result < 0) ? .OrderedDescending 
       : (result == 0) ? .OrderedSame : .OrderedAscending 
     } 
    } 

ここに私の削除機能のコードがあります。

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
    if editingStyle == UITableViewCellEditingStyle.Delete { 
     let data = self.pokemonList[indexPath.row] 
     self.pokemonList.removeObject(data) 

     self.images.removeObjectForKey(data["imageId"] as! String) 
     let idToRemove = self.ids[indexPath.row] 

     let appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
     let context:NSManagedObjectContext = appDel.managedObjectContext 
     if(objects[data["imageId"] as! String] != nil) 
     { 
      context.deleteObject(objects[data["imageId"] as! String]!) 

     } 
     do { 
      try context.save() 
     } catch _ { 
     } 

     self.ids.removeObject(idToRemove) 
     let ref = FIRDatabase.database().reference() 
     let userId = FIRAuth.auth()!.currentUser!.uid 
     let key = ref.child("users") 
     let b = key.child("\(userId)") 
     let c = b.child("scan") 
     let d = c.child(idToRemove as! String) 
     d.removeValue(); 

     tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic) 
     tableView.reloadData() 
    } 
} 

私は、アカウントにテーブルビューに積極的に現在のソート順を取るために削除機能のコードを編集する必要が疑われます。私はこれをどうやって行うかについてはあまりよく分かりません。

答えて

1

tableView.deleteRowsAtIndexPathsの後にtableView.reloadData()に電話する必要はありません。 reloadDataを呼び出すと、cellForRowAtIndexPath,numberOfRowsInSectionなどのテーブルビューのデリゲートとデータソースメソッドが一斉にトリガーされます。

関連する問題