2016-02-23 3 views
0

У меня есть всплывающее текстовое предупреждение в приложении, в котором пользователь может вводить символы для создания пользовательского имени для 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» в проверке печати?

Это то, что выводит на консоль в моей проверки заявления для печати, []: название сохраненной поездки

ответ

0

Ваша функция «saveRide()» вызывается немедленно. Поместите его внутри блока, чтобы он вызвал ваш файл saveAction.

+0

Приветствия, которые сработали! Мне это называлось self.self.saveRide(). Обычна ли вызывать себя дважды? Я никогда не видел этого раньше ... – Nikolai

Смежные вопросы