为什么当我返回时我的主视图控制器不会更新? [英] why won't my main viewcontroller update when i segue back?
问题描述
我正在尝试创建一个非常简单的应用程序.您在 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屋!