为什么当我返回时我的主视图控制器不会更新? [英] why won't my main viewcontroller update when i segue back?

查看:31
本文介绍了为什么当我返回时我的主视图控制器不会更新?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个非常简单的应用程序.您在 feedViewController 中,单击条形按钮图标(相机).它将带您到 AddEditViewController.

Im trying to create a very simple app. you are in feedViewController, click on bar button icon (a camera). It takes you to AddEditViewController.

在 AddEditView 控制器中,您希望在单击保存"后将在 feedViewController 中显示的数组中添加图片但是直到我在模拟器中停止应用程序并再次运行它后,我的图片才会显示.

in AddEditView controller, you want to add a picture in an array that will be displayed in feedViewController once you click "save" but my picture is not shown until i stop the app in the simulator and run it again.

import UIKit
import CoreData
import MobileCoreServices

class FeedViewController: UIViewController, UICollectionViewDataSource,
UICollectionViewDelegate, UIImagePickerControllerDelegate,
UINavigationControllerDelegate {
@IBOutlet weak var collectionView: UICollectionView!

var feedArray: [AnyObject] = []
let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    makeItLoad()
}
override func viewDidAppear(animated: Bool) {
    self.collectionView.reloadData()
}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func makeItLoad(){
    let request = NSFetchRequest(entityName: "FeedItem")
    let appDelegate:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
    let context:NSManagedObjectContext = appDelegate.managedObjectContext
    feedArray = try! context.executeFetchRequest(request)

    self.collectionView?.reloadData()
}    
@IBAction func addPhotoButtonTapped(sender: AnyObject) {
}

//UICollectionViewDataSource
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int
{

    return 1
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    return feedArray.count
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    let cell:FeedCell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! FeedCell
    let thisItem = feedArray[indexPath.row] as! FeedItem
    cell.imageView.image = UIImage(data: thisItem.image!)
    cell.captionLabel.text = thisItem.caption
    return cell

}


}

我的 addEditview 是:

and my addEditview is:

    import UIKit
    import CoreData
    import MobileCoreServices

    class AddEditViewController:
    UIViewController,NSFetchedResultsControllerDelegate,
    UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    var item : FeedItem? = nil

@IBOutlet weak var addEditNameField: UITextField!
@IBOutlet weak var addEditTypeField: UITextField!
@IBOutlet weak var addEditHashtagField: UITextField!
@IBOutlet weak var addEditImageViewHolder: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


@IBAction func addImageFromDevice(sender: AnyObject) {
    let pickerController = UIImagePickerController()
    pickerController.delegate = self
    pickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    pickerController.allowsEditing = true

    self.presentViewController(pickerController, animated: true, completion: nil)
}

@IBAction func addImageFromCamera(sender: AnyObject) {
    let pickerController = UIImagePickerController()
    pickerController.delegate = self
    pickerController.sourceType = UIImagePickerControllerSourceType.Camera
    pickerController.allowsEditing = true

    self.presentViewController(pickerController, animated: true, completion: nil)
}

   func imagePickerController(picker: UIImagePickerController,
   didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {

    self.dismissViewControllerAnimated(true, completion: nil)
    self.addEditImageViewHolder.image = image

}

@IBAction func saveButtonTapped(sender: AnyObject) {
    createNewItem()
    dismissVC()
}

@IBAction func cancelButtonTapped(sender: AnyObject) {
    dismissVC()
}
func dismissVC() {
    navigationController?.popViewControllerAnimated(true)
    FeedViewController().collectionView?.reloadData()
    FeedViewController().viewDidLoad()

}
     func createNewItem() {
     let entityDescription = NSEntityDescription.entityForName("FeedItem",
     inManagedObjectContext: FeedViewController().managedObjectContext)
     let feedItem = FeedItem(entity: entityDescription!,
     insertIntoManagedObjectContext:
     FeedViewController().managedObjectContext)

    feedItem.caption = addEditNameField.text
    feedItem.type = addEditTypeField.text
    feedItem.hashtags = addEditHashtagField.text
    feedItem.image = UIImagePNGRepresentation(addEditImageViewHolder.image!)
    FeedViewController().feedArray.append(feedItem)
    do {

        try FeedViewController().managedObjectContext.save()
    } catch {
        return
    }
}

func editItem() {
    item!.caption = addEditNameField.text
    item!.type = addEditTypeField.text
    item!.hashtags = addEditHashtagField.text
    item!.image = UIImagePNGRepresentation(addEditImageViewHolder.image!)

    do {
        try FeedViewController().managedObjectContext.save()
    } catch {
        return
    }
}

  }

所以我的问题是:一旦我按下通过 segue 连接到AddEditViewController"的相机,然后我选择一张图片并按下保存".为什么我的 FeedViewController 不会更新?为什么我必须停止模拟器并重新启动它才能显示出来?

So my question is: once i press the camera, which is connected to "AddEditViewController" through a segue, and i pick a picture and press "Save". Why won't my FeedViewController be updated? Why do I have to stop the simulator and relaunch it for it to show up?

推荐答案

所以,在玩了一会儿并尝试学习后,我找到了解决方案

So, After playing around a little bit and trying to learn, I found the solution

首先,在类外添加数组,使其成为全局的,而不是:

First of all, add the array outside of the class so it is global, so instead of:

 import UIKit
 import CoreData
 import MobileCoreServices

 class FeedViewController: UIViewController, UICollectionViewDataSource,
 UICollectionViewDelegate, UIImagePickerControllerDelegate,
 UINavigationControllerDelegate {
 @IBOutlet weak var collectionView: UICollectionView!
 var feedArray: [AnyObject] = []

更改它以便您拥有:

 import UIKit
 import CoreData
 import MobileCoreServices

  var feedArray: [AnyObject] = []

 class FeedViewController: UIViewController, UICollectionViewDataSource,
 UICollectionViewDelegate, UIImagePickerControllerDelegate,
 UINavigationControllerDelegate {
 @IBOutlet weak var collectionView: UICollectionView!

而不是使用

    FeedViewController().feedArray.append(feedItem)

现在您可以使用:

    feedArray.append(feedItem)

问题是,每次我使用:FeedViewController().fee..."我创建了一个新实例,所以我实际上没有正确附加数组.

What the problem was, is that every time i used : "FeedViewController().fee..." I created a new instance, so i actually didn't append the array properly.

希望对您有所帮助.

这篇关于为什么当我返回时我的主视图控制器不会更新?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆