2016-04-23 4 views
0

У меня есть кнопка, созданная в моем Main.storyboard, которая имеет имя (var) по имени deleteButton. Эта кнопка находится в каждой ячейке.Ошибка: невозможно преобразовать значение типа '(_, _) -> Void' в ожидаемый тип аргумента '((UIAlertAction) -> Void)?'

Когда пользователь нажимает кнопку, появляется предупреждение, подтверждающее удаление. Вот код.

@IBAction func deletePinpoint(sender: UIButton) { 

    let alertController = UIAlertController(title: "Delete pinpoint", message: "Do you want to delete this pinpoint?", preferredStyle: UIAlertControllerStyle.Alert) 

    alertController.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.Default, handler: { (action, indexPath) -> Void in 

     if let managedObjectContext = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext { 
      let pinpointToDelete = self.fetchResultController.objectAtIndexPath(sender.tag) as! Pinpoints 
      managedObjectContext.deleteObject(pinpointToDelete) 

      do { 
       try managedObjectContext.save() 
      } catch { 
       print(error) 
      } 
     } 
    })) 

    alertController.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)) 

    self.presentViewController(alertController, animated: true, completion: nil) 
} 

В методе cellForRowAtIndexPath: я объявил эту строку:

cell.deleteButton.tag = indexPath.row 

Я получаю ошибку на 3-й линии (начиная с alertController.addAction) сказал:

Cannot convert value of type '(_, _) -> Void' to expected argument type '((UIAlertAction) -> Void)?'

Как я почини это?

ответ

3

Параметр обработчика конструктора UIAlertAction принимает в качестве единственного параметра выбранный объект действия.

Вместо этого:

alertController.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.Default, handler: { (action, indexPath) -> Void in 

вы хотите:

alertController.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.Default, handler: { (alert:UIAlertAction) -> Void in 
+0

Это ошибка, то идет, и я получаю ошибку на '(sender.tag)' говоря ** Невозможно преобразовать значение типа «Int» до ожидаемого типа аргумента «NSIndexPath» **. –

+0

вам нужно создать объект NSIndexPath для перехода к objectAtIndexPath. пусть indexPath = NSIndexPath (forRow: sender.tag, inSection: 0), затем установите путь indexAtIndexPath (indexPath) – Sebastian

+0

Отлично! Это работает :)) –

Смежные вопросы

 Смежные вопросы