2016-08-19 27 views
4

我试图做一个应用程序,存储个人信息可以删除,编辑使用editActionsForRowAtIndexPath。删除选项似乎工作正常,但我遇到编辑操作的问题。刷卡swift编辑sqlite数据库内容

我得到一个错误,因为我已经提到如下:

Could not cast value of type 'Table_view.UserTableViewController' (0x10a1991b0) to 'NSIndexPath' (0x10a5e8438). 

UserRecordViewController是视图控制器,其中个人信息将被显示。而InsertRecordViewController是另一个View Controller。

UserTableViewController相关代码:

func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { 
    // 1 
    let editAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Edit" , handler: { (action:UITableViewRowAction, indexPath:NSIndexPath) -> Void in 

      self.performSegueWithIdentifier("editSegue", sender: self) 

    }) 

    editAction.backgroundColor = UIColor.darkGrayColor() 
    // let editIndex = editAction.indexOfAccessibilityElement(indexPath.row) 

    let deleteAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Delete" , handler: { (action:UITableViewRowAction, indexPath:NSIndexPath) -> Void in 

     let userInfo: UserInfo = self.marrUserData.objectAtIndex(indexPath.row) as! UserInfo 
     let isDeleted = ModelManager.getInstance().deleteUserData(userInfo) 
     if isDeleted { 
      Util.invokeAlertMethod("", strBody: "Record deleted successfully.", delegate: nil) 
     } else { 
      Util.invokeAlertMethod("", strBody: "Error in deleting record.", delegate: nil) 
     } 
     self.getUserData() 

    }) 

    deleteAction.backgroundColor = UIColor.lightGrayColor() 

    return [deleteAction, editAction] 
} 



override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if(segue.identifier == "editSegue"){ 

     let selectedIndexPath = sender as! NSIndexPath 
     let index = selectedIndexPath.row 
     //if let indexPath: NSIndexPath = self.tableView.indexPathForCell(sender as! UITableViewCell) { 

     //let btnEdit : UIButton = sender as! UIButton 
     //let selectedIndex : Int = btnEdit.tag 
     let viewController : InsertRecordViewController = segue.destinationViewController as! InsertRecordViewController 
     viewController.isEdit = true 
     viewController.userData = self.marrUserData.objectAtIndex(index) as! UserInfo 

     // } 

    } 

} 

我想知道我要去哪里错了。任何想法的家伙?

在此先感谢!

回答

0

导致错误的行是:let selectedIndexPath = sender as! NSIndexPath 发件人是SelectedCell,而不是IndexPath!
之前行self.performSegueWithIdentifier("editSegue", sender: self)设置类(selectedIndexPath)的属性为indexPath,然后您从prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)访问此属性。

做到这一点的另一种方法,可以发现在:https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson9.html#//apple_ref/doc/uid/TP40015214-CH9-SW1

+0

对不起,但如何在func prepareForSegue中有用? –

+0

ThanQ! :)有关如何访问UITableViewCell到我的UserTableViewController的任何想法? –

+0

什么?我不明白你想要做什么 – ale00

1

我有完全相同的问题,我能解决它通过在FUNC prepareForSegue增加了一些额外的东西

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

if(segue.identifier == "editSegue"){ 

    let cell = sender as! UITableViewCell 
    let Path = tableView.indexPathForCell(cell) 
    let index = Path?.row 
    let viewController : InsertRecordViewController = segue.destinationViewController as! InsertRecordViewController 
    viewController.isEdit = true 
    viewController.userData = self.marrUserData.objectAtIndex(index!) as! UserInfo 

    // } 

} 

现在我意识到这不完全是你想要做的。因为用我的方法,你只需点击单元格,它就会直接指向路径而不是滑动。我也想做幻灯片,但我无法弄清楚,所以我只用上面的方法。希望这会有所帮助:)