2016-05-19 15 views
0

私たちは、いくつかの旅行をプログラムし、NSUserDefaultsに保存して、それらをtableViewで取得しようとしているAppを持っています。これを行うために、2つのviewControllerがあります。NSUserDefaultsに画像を格納してtableViewに表示する際の問題。 Swift

destinationTextField、dateTextField、companyTextField:

は、ここにあなたが見ることができるように、最初のViewController(programViewController.swift)に、我々は3 UITextFieldsを持っているという考え

enter image description here

です。

UIImageViewには、UIImagePickerViewControllerで写真を選択するボタンがあります。

終了するには、「programar viaje」またはプログラム旅行というボタンがあります。これをクリックすると、NSUserDefaultsのすべてのフィールドが保存されます

2番目のViewController(travelViewController.swift)には、移動を表示するためのテーブルビューがあります。

すべてのテキストフィールドを保存することができます。 写真をNSUserDefaultsに正しく保存してtravelViewController.swiftのテーブルに表示できません。

どこが間違っていますか?

輸入のUIKit

は(デフォルト=のNSUserDefaults.standardUserDefaultsを聞かせて)

**のvar destinationArray =文字列

するvar DATEARRAY =文字列

するvar companyArray =文字列

のvar 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 programButton(送信者:ANYOBJECT)FUNC prepareForSegue(セグエ:UIStoryboardSegue、送信者:ANYOBJECT?)FUNC {

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) 


} 

オーバーライド{

 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

デフォルトを更新するには、synchronized()メソッドを使用していますか? –

+0

コアデータの使用をお勧めします。 NSUserDefaultsは、わずかなデータを格納するためのものです。一部の人々は、少し混乱しているのでコアデータが気に入らない。あなたは簡単にオンラインで代替案をチェックアウトすることができます! –

+0

'UIImage'を' NSData'に変換してから、 'NSUserDefaults'に保存しようとしてください。 – kye

答えて

2

NSUserDefaultsは画像のようなラージ・オブジェクトを格納するために意図されていません。あなたのイメージをドキュメントディレクトリに保存してから、イメージへのパスをデフォルトに保存することをお勧めします。

+0

私はそれを試してみるDuncan – JoseMartinFit

関連する問題