У меня есть всплывающее текстовое предупреждение в приложении, в котором пользователь может вводить символы для создания пользовательского имени для TXT-файла и сохранения файла. Это имя файла хранится в глобальной переменной, называемой rideContent. Когда я вызываю функцию saveRide(), файл, полный информации о строках, сохраняется в .txt, а должен использовать имя файла, созданного пользователем в текстовом поле, однако имя файла, хранящегося в массиве, пуст.Как сохранить и загрузить файл .txt с пользовательским именем?
Я вызываю функцию сохранения из строя или слишком скоро в функции stopAction, и поэтому массив пуст? Или я вызываю неправильное обращение к каталогуName = rideContent? т.е. rideName = rideContent [-1]?
Я хотел бы, чтобы пользователь вводил собственное имя и использовал его как идентификатор для сохранения и загрузки файла. Любая помощь будет принята с благодарностью!
Здесь я называю глобальную переменную rideContent:
var rideContent = [String]()
Здесь я называю функцию сохранения:
@IBAction func stopAction(sender: UIButton) {
let alert = UIAlertController(title: "Ride Stopped", message: "Give a title to your ride", preferredStyle: .Alert)
let saveAction = UIAlertAction(title: "Save", style: .Default,
handler: { (action:UIAlertAction) -> Void in
// Allow for text to be added and appended into the RideTableViewController
let textField = alert.textFields!.first
rideContent.append(textField!.text!)
// Update permanent storage after deleting a ride
NSUserDefaults.standardUserDefaults().setObject(rideContent, forKey: "rideContent")
// Segue to the Ride details page
self.performSegueWithIdentifier("ShowRideDetail", sender: nil)
})
let cancelAction = UIAlertAction(title: "Cancel",
style: .Default) { (action: UIAlertAction) -> Void in
}
alert.addTextFieldWithConfigurationHandler {
(textField: UITextField) -> Void in
}
alert.addAction(saveAction)
alert.addAction(cancelAction)
//Show the alert
presentViewController(alert, animated: true, completion: nil)
// Stop the timer
timer.invalidate()
// Stop location updates
self.stopLocation()
// Save the ride
saveRide()
}
Вот код для сохранения в текстовый файл:
func saveRide() {
let rideName = rideContent
// Print Check
print("\(rideName) : the name of the saved ride")
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentsDirectory = paths[0]
let fileName = ("\(documentsDirectory)")+("\(rideName)")+(".txt")
print("\(fileName)This is firt check")
var content: String
// Adding elasped time information to the bicycle ride
// Content Order: Seconds, Minutes, Hours, Distance \n coordinates
content = ("\(seconds) Seconds, ")+("\(minutes) Minutes, ")+("\(hours) Hours, ") + ("\(self.distanceLabel.text!)") + "\n"
// Create a for loop to add each recorded coordinate value to the content list to later be added and displayed as a polyline
for coord in self.coords {
content = content + ("\(coord.latitude) " + "," + "\(coord.longitude) " + "\n")
}
do{
try content.writeToFile(fileName, atomically: false, encoding: NSUTF8StringEncoding)
}catch _ {
}
}
Here - это скриншот, в котором пользователь может ввести имя пользователя. На основании имени поездки пользователя, не следует ли назвать название поездки «Morning Ride» в проверке печати?
Это то, что выводит на консоль в моей проверки заявления для печати, []: название сохраненной поездки
Приветствия, которые сработали! Мне это называлось self.self.saveRide(). Обычна ли вызывать себя дважды? Я никогда не видел этого раньше ... – Nikolai