2017-01-06 205 views
4

我是Swift 3的新手,想创建一个小小的待办事项列表。但在viewDidLoad应用程序总是崩溃,因为UILongPressGestureRecognizer。我在互联网上搜索,但我没有找到工作解决方案。UILongPressGestureRecognizer in Swift 3

这里是我的代码,每次它说: “主题1:1.1的断点” 在符合UILongPressGestureRecognizer:

class ViewController: UIViewController, UITableViewDelegate { 


@IBOutlet weak var newButton: UIButton! 
@IBOutlet weak var tableView: UITableView! 
@IBOutlet weak var editButton: UIButton! 

var todoList = Todo.load(){ 
    didSet{ 
     Todo.save(todoList) 
    } 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 
    tableView.delegate = self 
    tableView.dataSource = self 

    let lpgr = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.handleLongPress(_:))) 
    lpgr.minimumPressDuration = 1.2 
    tableView.addGestureRecognizer(lpgr) 
} 


func handleLongPress(_ gesture: UILongPressGestureRecognizer){ 
    if gesture.state != .began { return } 
    let pt = gesture.location(in: tableView) 
    let path = tableView.indexPathForRow(at: pt) 
    if let row = (path as NSIndexPath?)?.row, 
     let cell = tableView.cellForRow(at: path!){ 
    showPopup(sender: cell, mode: "edit", text: todoList[row], row: row) 
    } 
} 

下面是todo.txt文件的代码:

struct Todo { 
static func save(_ data: [String]){ 
    if let url = docUrl(for: "todo.txt"){ 
     do { 
      let str = data.joined(separator: "\n") 
      try str.write(to: url, atomically: true, encoding: .utf8) 
     } catch { 
      print(error) 
     } 
    } 
} 
static func load() -> [String] { 
    if let url = docUrl(for: "todo.txt"){ 
     do{ 
      let str = try String(contentsOf: url, 
           encoding: .utf8) 
      return str.characters 
       .split {$0 == "\n"} 
       .map { String($0)} 
     } catch { 
      print(error) 
     } 
    } 
    return [] 
} 
private static func docUrl(for filename: String) -> URL? { 
    let urls = FileManager.default.urls(for: .documentDirectory, 
             in: .userDomainMask) 
    if let docDir = urls.first { 
     return docDir.appendingPathComponent(filename) 
    } 
    return nil 
} 

}

这里是我的错误报导:

Error Domain=NSCocoaErrorDomain Code=260 "The file “todo.txt” couldn’t be opened because there is no such file." UserInfo={NSFilePath=/Users/mkartds/Library/Developer/CoreSimulator/Devices/5D70E1CB-6D29-49E4-BCD1-316B5022F085/data/Containers/Data/Application/34869E75-E498-4674-B504-E7867935E3FE/Documents/todo.txt, NSUnderlyingError=0x61000004a830 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}} 

(lldb)

我该怎么办?

+0

请分享错误日志跟踪,我在这方面的工作,也许问题是其他地方。 –

+0

**线程1:断点1.1 **意味着您意外激活了断点,只需删除或禁用断点即可。 –

+0

我将错误报告添加到了我的问题中!但我现在可以解决这个问题! – Jan

回答

0

假设您已在项目目标中添加了todo.txt文件。

尝试更新docUrl方法具有以下,

private static func docUrl() -> URL? { 
    let bundle = Bundle.main 
    let path = bundle.path(forResource: "todo", ofType: "txt") 
    let fileURL = URL(fileURLWithPath: path) 
    return fileURL 
} 

停用断点:

enter image description here

+0

即使删除了UILongPressGestureRecognizer部件,我也得到相同的断点,但没有任何错误!只是:“(lldb)” – Jan

+0

@Jan,请停用您的断点,请参阅上图。 –

+0

哦,工作!非常感谢你! – Jan