我們有一個應用程序,我們試圖編程一些旅行,將它們保存在NSUserDefaults中,並在tableView中檢索它們。爲了做到這一點,我們有兩個viewControllers。將圖像存儲在NSUserDefaults中以在tableView中顯示它們的問題。 Swift
這裏是思想
正如你所看到的,在第一個的viewController(programViewController.swift)我們有三個UITextFields:
destinationTextField,dateTextField,companyTextField。
和一個UIImageView與一個按鈕來選擇與UIImagePickerViewController的照片。
要完成我們有一個名爲「programar viaje」或程序旅行的按鈕。當我們點擊這個應用程序保存我們所有的字段在NSUserDefaults
第二個ViewController(travelViewController.swift)有一個表視圖來顯示旅行。
好吧,我可以保存所有的文本框, ,但我無法將照片正確保存在NSUserDefaults中,並將其顯示在travelViewController.swift的表中。
我在哪裏錯了傢伙?
進口的UIKit
讓默認= NSUserDefaults.standardUserDefaults()
**變種destinationArray =字符串
變種dateArray =字符串
變種companyArray =字符串
變種pictureArray = UIImage **
類programViewController:UIViewController中,UINavigationControllerDelegate,UIImagePickerControllerDelegate,UITextViewDelegate {
@IBOutlet weak var destinyTextField: UITextField!
@IBOutlet weak var dateTextField: UITextField!
@IBOutlet weak var companyTextField: UITextField!
@IBOutlet weak var companyPicture: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func choosePhoto(sender: AnyObject) {
let picker = UIImagePickerController()
picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
picker.allowsEditing = true
picker.delegate = self
self.presentViewController(picker, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {
self.companyPicture.image = image
self.dismissViewControllerAnimated(true, completion: nil)
}
@IBAction FUNC programButton(發件人:AnyObject){
destinationArray.append(destinyTextField.text!)
dateArray.append(dateTextField.text!)
companyArray.append(companyTextField.text!)
pictureArray.append(companyPicture.image!)
defaults.setObject(destinationArray, forKey: "destinyUD")
defaults.setObject(dateArray, forKey: "dateUD")
defaults.setObject(companyArray, forKey: "companyUD")
defaults.setObject(pictureArray, forKey: "pictureUD")
print("Destinos \(destinationArray), Fechas \(dateArray) , Compañía \(companyArray) , Imágenes \(pictureArray)")
self.performSegueWithIdentifier("programSegue", sender: self)
}
倍率FUNC prepareForSegue(SEGUE:UIStoryboardSegue,發件人:AnyObject) {
if segue.identifier == "programSegue" {
if let vc : travelViewController = segue.destinationViewController as? travelViewController {
vc.passedDestination = destinationArray
vc.passedDate = dateArray
vc.passedCompany = companyArray
vc.passedPicture = pictureArray
}
}
}
class travelViewController:UIViewController,UITableViewData源,的UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var passedDestination = []
var passedDate = []
var passedCompany = []
var passedPicture = []
override func viewDidLoad() {
super.viewDidLoad()
print("Soy viewdidload")
if NSUserDefaults.standardUserDefaults().objectForKey("destinyUD") != nil {
destinationArray = NSUserDefaults.standardUserDefaults().objectForKey("destinyUD") as! [String]
}
if NSUserDefaults.standardUserDefaults().objectForKey("dateUD") != nil {
dateArray = NSUserDefaults.standardUserDefaults().objectForKey("dateUD") as! [String]
}
if NSUserDefaults.standardUserDefaults().objectForKey("companyUD") != nil {
companyArray = NSUserDefaults.standardUserDefaults().objectForKey("companyUD") as! [String]
}
if NSUserDefaults.standardUserDefaults().objectForKey("pictureUD") != nil {
pictureArray = NSUserDefaults.standardUserDefaults().objectForKey("companyUD") as! [UIImage]
}
}
override func viewWillAppear(animated: Bool) {
//print("Soy viewDidAppear")
}
override func viewDidAppear(animated: Bool) {
tableView.reloadData()
print("Estoy recargando la tabla")
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//return fecha.count
return destinationArray.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell : customCell2 = (tableView.dequeueReusableCellWithIdentifier("cell2", forIndexPath: indexPath) as? customCell2)!
cell.cellDestination.text = destinationArray[indexPath.row]
cell.cellDate.text = dateArray[indexPath.row]
cell.cellCompany.text = companyArray[indexPath.row]
cell.cellImage2.image = pictureArray[indexPath.row] as? UIImage
return cell
}
您是否使用synchronize()方法更新默認值? –
我會推薦使用核心數據。 NSUserDefaults僅用於存儲小塊數據。有些人不喜歡核心數據,因爲它有點混亂。您可以在網上查看替代品,以使其更容易! –
嘗試將'UIImage'轉換爲'NSData',然後嘗試將其存儲在'NSUserDefaults'中。 – kye