私たちは、いくつかの旅行をプログラムし、NSUserDefaultsに保存して、それらをtableViewで取得しようとしているAppを持っています。これを行うために、2つのviewControllerがあります。NSUserDefaultsに画像を格納してtableViewに表示する際の問題。 Swift
destinationTextField、dateTextField、companyTextField:
は、ここにあなたが見ることができるように、最初のViewController(programViewController.swift)に、我々は3 UITextFieldsを持っているという考え
です。
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
}
デフォルトを更新するには、synchronized()メソッドを使用していますか? –
コアデータの使用をお勧めします。 NSUserDefaultsは、わずかなデータを格納するためのものです。一部の人々は、少し混乱しているのでコアデータが気に入らない。あなたは簡単にオンラインで代替案をチェックアウトすることができます! –
'UIImage'を' NSData'に変換してから、 'NSUserDefaults'に保存しようとしてください。 – kye