私は、最古から最新の順に約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()
}
}
私は、アカウントにテーブルビューに積極的に現在のソート順を取るために削除機能のコードを編集する必要が疑われます。私はこれをどうやって行うかについてはあまりよく分かりません。