2016-03-04 28 views
1

概述: 我正在開發我的第一個應用程序。它收集用戶位置信息以跟蹤騎自行車。我將內容保存到一個.txt文件(座標信息和屬性信息)。然後,用戶可以將他們的數據從iOS應用程序中導出以供進一步分析。我已成功添加保存文本文件功能來存儲信息。保存到NSUserDefaults的文件在創建新文件後隨着時間消失

應用,同時在使用: 用戶輸入一個自定義標題,然後該名稱被附加到列出了所有記錄的騎的tableview。在遊戲創建中,我調用NSUserDefaults,這是非常重要的,沒有對NSUserDefaults的調用,遊戲名稱不會附加到列出所有遊樂設施的tableview中。

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") 

現在,當用戶查看過去的遊樂設施,他們可以選擇一箇舊的平順性和此加載信息,一切都很好有!

問題: 不知何故發生一段時間後,會是一個騎會被覆蓋/丟失?當在iPhone上進行測試時,我可以記錄一次乘車,然後幾個小時後,我檢查過去在遊覽中的乘坐情況,如果我記錄一次新的乘坐,然後檢查過去的乘坐,幾個小時前記錄的乘坐是否是但是是走了,但新的騎在那裏。

我唯一調用NSUserDefaults的時間是在tableview中。在下列情況下,我把它在這,在viewDidLoad中:

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Set up an if statement so that if there is no saved content it does not throw an error, if there is, populate the information with rideContent, if not leave the list as empty 
    if NSUserDefaults.standardUserDefaults().objectForKey("rideContent") != nil { 

     // Save content of rideContent as permanent storage so the ride is saved even when the app has been closed, this restores the old data 
     rideContent = NSUserDefaults.standardUserDefaults().objectForKey("rideContent") as! [String] 

    } 

} 

進一步回落時,我把它當用戶刷卡刪除文件:

// This method will be called when a user tries to delete an item in the table by swiping to the left 
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 

    // create an if statement to select the delete function after a user swipes to the left on a cell in the table 
    if editingStyle == UITableViewCellEditingStyle.Delete { 

     //Delete an item at the row index level 
     rideContent.removeAtIndex(indexPath.row) 

     // Update permanent storage after deleting a ride 
     NSUserDefaults.standardUserDefaults().setObject(rideContent, forKey: "rideContent") 

     // This is called so that when a file has been deleted, it will reload the view to reflect this change 
     savedRideTable.reloadData() 

    } 

} 

我想,如果下面的代碼似乎正常,這是否意味着保存到用戶文檔不提供真正的永久存儲文件?有沒有更好的地方來存儲這些文件?我希望我不太模糊,我很難追查爲什麼應用程序會這樣做,或者究竟是什麼觸發了這種情況發生。謝謝stackExchange的幫助!

+0

'NSUserDefaults'真的應該被用於存儲設置,而不是應用程序數據。我會使用CoreData來處理你想要做的事情。 – dan

回答

1

這是NSUserDefaults的正常行爲。您不保存txt文件,您在NSUserDefaults中存儲String,即使最終結果可能相似,這些也是兩件不同的事情。
當您致電:

NSUserDefaults.standardUserDefaults().setObject(rideContent, forKey: "rideContent") 

第二次以前的值被替換爲新的值。
你有三個選擇:使用NSUserDefaults類來存儲這些字符串

相關問題