2016-05-19 49 views
0

我們有一個應用程序,我們試圖編程一些旅行,將它們保存在NSUserDefaults中,並在tableView中檢索它們。爲了做到這一點,我們有兩個viewControllers。將圖像存儲在NSUserDefaults中以在tableView中顯示它們的問題。 Swift

這裏是思想

enter image description here

正如你所看到的,在第一個的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 


} 
+0

您是否使用synchronize()方法更新默認值? –

+0

我會推薦使用核心數據。 NSUserDefaults僅用於存儲小塊數據。有些人不喜歡核心數據,因爲它有點混亂。您可以在網上查看替代品,以使其更容易! –

+0

嘗試將'UIImage'轉換爲'NSData',然後嘗試將其存儲在'NSUserDefaults'中。 – kye

回答

2

NSUserDefaults不旨在用於存儲像圖像大對象。我建議將圖像存儲到文檔目錄,然後將圖像的路徑保存爲默認值。

+0

我會試試看鄧肯 – JoseMartinFit

相關問題