2016-08-15 13 views
2

検索バーを実装しました。私は食べ物だけを探しても大丈夫です。しかし、検索結果から食品を編集しようとすると、検索配列(foodSearching)のみが変更されますが、元の配列(食品)は変更されません。だから、私はテーブルビューを編集するとき、元の配列(食品)のインデックスパスを知る必要があります。助けはありますか?詳細なテーブルビューの元のセルインデックスを確認するにはどうすればよいですか?

selectedIndexPathは、私のようにindexPathを使用しないことをお勧め

@IBAction func unwindToFoodList(sender: UIStoryboardSegue) { 
    if let sourceViewController = sender.sourceViewController as? FoodViewController, food = sourceViewController.food { 
     if let selectedIndexPath = tableView.indexPathForSelectedRow { 
      // Update an existing food. 
      if(isSearching){ 
       foodSearching[selectedIndexPath.row] = food 

       // foodSearching array is temporary.. 
       //need to find indexpath for foods array(original array)and update it as well...!! 

       tableView.reloadRowsAtIndexPaths([selectedIndexPath], withRowAnimation: .None) 

      }else{ 
       foods[selectedIndexPath.row] = food 
       tableView.reloadRowsAtIndexPaths([selectedIndexPath], withRowAnimation: .None) 
      } 

     } else { 
      // Add a new food. 
      let newIndexPath = NSIndexPath(forRow: foods.count, inSection: 0) 
      foods.append(food) 
      tableView.insertRowsAtIndexPaths([newIndexPath], withRowAnimation: .Bottom) 
     } 
     // Save the foods. 
     saveFoods() 
    } 
} 
+1

セルを編集しないでください。データモデルを編集し、テーブルをリロードします。あなたのモデルが大規模でない限り、テーブル全体をリロードするだけです。 – Gargoyle

答えて

1

「foodSearching」配列(一時的な配列表示する検索結果)と「食品」の配列(データのすべてを保持するために、元の配列)のために異なっていますindexPath以降のデータへの参照は変更されることがあります。コアデータを使用している場合、私はobjectIDを提案しますが、そうでない場合は、他の一意の識別可能な情報を使用して参照として使用することをお勧めします。以下のヘルパー関数を作成すると、実装に役立ちます。

func indexPath(forFoodWithID uniqueID: IDType) -> NSIndexPath? 
func foodID(forFoodAtIndexPath indexPath: NSIndexPath) -> IDType? 

私は役に立つと思います。

関連する問題