2017-07-27 1 views
3

私はEntity FOODを持ち、UItableViewで表示される配列fruit = ["Apple", "Orange", "Pear", "Kiwi"]を持っています。いくつかのコンテンツを削除不能にする方法はありますか?たとえば、"Kiwi"を削除できないようにすることはできますか?UITableView [Swift 3.0 - Xcode 8]で一部の行だけを削除できるようにする

何かのように、 let i = fruit.index(where: "Kiwi") let IArr = [0...fruit.count] IArr = IArr.filter{$0 != i} //はindexPathが配列型を取ることができないので、

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IArr) { 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let context = appDelegate.persistentContainer.viewContext 

    if editingStyle == .delete{ 
     let FRUIT = fruit[indexPath.row] 
     context.delete(FRUIT) 

     appDelegate.saveContext() 
     do { 
      fruit = try context.fetch(FOOD.fetchRequest()) 
     } 
     catch 
     { 
      print("did not fetch")} 
     } 
     tableView.reloadData()} 

はしかし、これは動作しませんキウイ

のインデックスを削除します。 どうすればいいですか?

+0

。果物がキウイであるときに削除アクションを単に禁止することができます: 'let FRUIT = fruit [indexPath.row]; editStyle == .delete && FRUIT!= "Kiwi" {/ * delete * /} ' –

+0

これは簡単な答えです!ありがとうございました! –

+0

あなたは答えに何かを投稿することができますか? –

答えて

3

あなたはインデックスパスの行はキウイではないことをテストすることができます:私は本当にあなたを以下のいないよ

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IArr) { 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let context = appDelegate.persistentContainer.viewContext { 

    let FRUIT = fruit[indexPath.row] 

    if editingStyle == .delete && FRUIT != "Kiwi" { 
     /* delete */ 
    } 
} 
関連する問題