Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:请用户在单击每个停止按钮后输入文本文件名_Ios_Swift_Iphone_Xcode - Fatal编程技术网

Ios Swift:请用户在单击每个停止按钮后输入文本文件名

Ios Swift:请用户在单击每个停止按钮后输入文本文件名,ios,swift,iphone,xcode,Ios,Swift,Iphone,Xcode,我创建了一个可以收集数据的停止按钮,单击停止按钮后,数据将保存到定义的路径。但是,如果我想在单击“停止”按钮后继续收集,数据将添加到原始文本文件中。(这很有意义,因为我只知道如何定义一条路径) 我的问题是:是否可以在每次停止后询问用户并输入新的文件名并另存为新的文本文件,这样数据就不会添加到原始文件中? 下面是我为一个定义的路径和堆叠数据所做的准备: @IBAction func stopbuttonTapped(_ btn: UIButton) { do {

我创建了一个可以收集数据的停止按钮,单击停止按钮后,数据将保存到定义的路径。但是,如果我想在单击“停止”按钮后继续收集,数据将添加到原始文本文件中。(这很有意义,因为我只知道如何定义一条路径)

我的问题是:是否可以在每次停止后询问用户并输入新的文件名并另存为新的文本文件,这样数据就不会添加到原始文件中?

下面是我为一个定义的路径和堆叠数据所做的准备:

    @IBAction func stopbuttonTapped(_ btn: UIButton) {
        do {
            let username:String = user_name.text!
            fpsTimer.invalidate() //turn off the timer
            let capdata = captureData.map{$0.verticesFormatted}.joined(separator:"") //convert capture data to string
            let dir: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last! as URL
            let url = dir.appendingPathComponent("testing.txt") //name the file
            try capdata.appendLineToURL(fileURL: url as URL)
            let result = try String(contentsOf: url as URL, encoding: String.Encoding.utf8)
        }
        catch {
            print("Could not write to file")
        }
}
以及我用于字符串和数据的扩展名:

 extension String {
   func appendLineToURL(fileURL: URL) throws {
        try (self).appendToURL(fileURL: fileURL)
    }

    func appendToURL(fileURL: URL) throws {
        let data = self.data(using: String.Encoding.utf8)!
        try data.append(fileURL: fileURL)
    }
    func trim() -> String
      {
       return self.trimmingCharacters(in: CharacterSet.whitespaces)
      }
}
extension Data {
    func append(fileURL: URL) throws {
        if let fileHandle = FileHandle(forWritingAtPath: fileURL.path) {
            defer {
                fileHandle.closeFile()
            }
            fileHandle.seekToEndOfFile()
            fileHandle.write(self)
        }
        else {
            try write(to: fileURL, options: .atomic)
        }
    }
}

我是否需要设置一个默认文件名(可能是texting.txt),然后弹出一个用户输入来保存文本文件?(这就是我不太确定如何整合到我已经拥有的东西中的地方)。非常感谢您提前抽出时间和提出建议。

您可以生成唯一的名称

例如:

let url = dir.appendingPathComponent("testing-\(Date.timeIntervalSinceReferenceDate).txt")


谢谢你的回复!每次单击后,它都会输出一个单独的文件!对于文件名,我得到了一个我不太明白的时间号码,它是613509736.89。是否可以获取当前时间?我尝试了Date().TimeIntervalsInnow,但仍然给了我一些我不太理解的数字,这是自参考日期起的秒数。您可以使用date init将其反转为日期。您还可以格式化以使其可读:
let url = dir.appendingPathComponent("testing-\(UUID().uuidString).txt")