Xcode 7.3.1, Swift 2.2Datei umbenennen, ohne eine Dateierweiterung einzugeben
Der Code, den ich unten habe, benennt die Datei wie erwartet um. Mein Problem ist, dass ich den "New File Name" ohne eine Erweiterung im Texteingabefeld Text eingeben möchte. Wenn der Benutzer dann "Ja" drückt, wird die Dateierweiterung "m4u" zum neuen Namen hinzugefügt und schließlich die Datei "New File Name.m4u" umbenannt. Ich möchte nicht, dass der Benutzer mit Dateiendungen umgehen muss.
würde Jede Hilfe sehr ..... geschätzt werden
func askToRename(row:Int) {
let recording = self.arrayRecordings[row]
let recordingURL = self.arrayRecordingsURL[row]
let alert = UIAlertController(title: "Rename",
message: "Rename Recording \(recording)?",
preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "Yes", style: .Default, handler: {[unowned alert] action in
print("yes was tapped \(self.arrayRecordingsURL[row])")
if let textFields = alert.textFields{
let tfa = textFields as [UITextField]
let text = tfa[0].text
let url = NSURL(fileURLWithPath: text!)
self.renameRecording(recordingURL, to: url)
}
}))
alert.addAction(UIAlertAction(title: "No", style: .Default, handler: {action in
print("no was tapped")
}))
alert.addTextFieldWithConfigurationHandler({textfield in
textfield.placeholder = "Enter a filename"
textfield.text = "\(recordingURL.lastPathComponent!)"
})
self.presentViewController(alert, animated:true, completion:nil)
}
func renameRecording(from:NSURL, to:NSURL) {
let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let toURL = documentsDirectory.URLByAppendingPathComponent(to.lastPathComponent!)
print("renaming file \(from.absoluteString) to \(to) url \(toURL)")
let fileManager = NSFileManager.defaultManager()
fileManager.delegate = self
do {
try NSFileManager.defaultManager().moveItemAtURL(from, toURL: toURL)
} catch let error as NSError {
print(error.localizedDescription)
} catch {
print("error renaming recording")
}
dispatch_async(dispatch_get_main_queue(), {
self.listRecordings()
// self.tableView.reloadData()
})
}
func listRecordings() {
let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
do {
let urls = try NSFileManager.defaultManager().contentsOfDirectoryAtURL(documentsDirectory, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.SkipsHiddenFiles)
self.arrayRecordingsURL = urls.filter({ (name: NSURL) -> Bool in
return name.lastPathComponent!.hasSuffix("m4a")
})
} catch let error as NSError {
print(error.localizedDescription)
} catch {
print("something went wrong listing recordings")
}
}
extension ViewControllerFileManager: NSFileManagerDelegate {
func fileManager(fileManager: NSFileManager, shouldMoveItemAtURL srcURL: NSURL, toURL dstURL: NSURL) -> Bool {
print("should move \(srcURL) to \(dstURL)")
return true
}
}
wie etwa den Pfad Erweiterung in Ihrem Code hinzuzufügen. // lass text = tfa [0] .text + ".m4u" – WeiJay
Danke für die Hilfe Wei Jay, leider hat das nicht den Trick gemacht. – Bill