2016-08-01 11 views
-1

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 
} 

}

+1

wie etwa den Pfad Erweiterung in Ihrem Code hinzuzufügen. // lass text = tfa [0] .text + ".m4u" – WeiJay

+0

Danke für die Hilfe Wei Jay, leider hat das nicht den Trick gemacht. – Bill

Antwort

1

Ich konnte die gewünschte Funktionalität implementieren oben, indem sie ein paar kleine Teakhölzer zu meiner ursprünglichen Code ..

In der Funktion "askToRename" habe ich die folgenden Zeilen geändert.

Von:

let url = NSURL(fileURLWithPath: text!) 

An:

let url = NSURL(fileURLWithPath: text!).URLByAppendingPathExtension("m4a") 

und

Von:

textfield.text = "\(recordingURL.lastPathComponent!)" 

An:

textfield.text = "\(recordingURL.URLByDeletingPathExtension!.lastPathComponent!)"