2017-01-06 4 views
4

私はSwift 3を初めて使用しており、To-Do-Listを少し作成したいと考えていました。しかし、viewDidLoadでは、UILongPressGestureRecognizerのためにアプリケーションが常にクラッシュします。私はインターネットで検索しましたが、実際の解決策は見つかりませんでした。Swift 3のUILongPressGestureRecognizer

は、ここに私のコードだと毎回それが言う "スレッド1:1.1をブレークポイント" UILongPressGestureRecognizerに沿って:

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 
} 

}:ここ

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ファイルのコードですここで

は私のエラー・レポートです:

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ファイルをプロジェクトのターゲットに追加したとします。

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

はあなたのブレークポイントを無効にし、次のようにdocUrl方法を更新してみてください。エラーログのトレースを共有してください

enter image description here

+0

私はUILongPressGestureRecognizerの部分を削除しても、エラーなしで同じブレークポイントを取得します! Just: "(lldb)" – Jan

+0

@Jan、あなたのブレークポイントを無効にしてください。上の画像を参照してください。 –

+0

ああ働いた!どうもありがとうございました! – Jan