Ios 将数据与分段一起传递
问题是:我试图将一些数据从一个ViewController传递到另一个InfoViewController。看起来是这样的: 运行,应用程序,它看起来像这样: 除了这两个视图控制器之外,我在这个应用程序中还有一些其他的视图控制器,它们的序列工作得很好,但是,当我点击单元格时,它确实会转到InfoViewController,但信息不会得到更新 这是我的密码:Ios 将数据与分段一起传递,ios,swift,uiviewcontroller,delegates,segue,Ios,Swift,Uiviewcontroller,Delegates,Segue,问题是:我试图将一些数据从一个ViewController传递到另一个InfoViewController。看起来是这样的: 运行,应用程序,它看起来像这样: 除了这两个视图控制器之外,我在这个应用程序中还有一些其他的视图控制器,它们的序列工作得很好,但是,当我点击单元格时,它确实会转到InfoViewController,但信息不会得到更新 这是我的密码: import UIKit import CoreData protocol sendNameDelegate { fun
import UIKit import CoreData
protocol sendNameDelegate {
func sendName(name: String) }
protocol sendImageDelegate {
func sendImage(image: UIImage) }
class MainViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, sendDetailsToMVCDelegate, NSFetchedResultsControllerDelegate, NSCoding {
@IBOutlet weak var tableView: UITableView!
var namesListArray:[String] = []
var imagesListArray:[UIImage] = []
var delegateName: sendNameDelegate?
var delegateImage: sendImageDelegate?
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
if let namesList = aDecoder.decodeObjectForKey("namesListArray") as? [String] {
namesListArray = namesList
} else {
namesListArray = [String]()
}
if let imagesList = aDecoder.decodeObjectForKey("imagesListArray") as? [UIImage] {
imagesListArray = imagesList
} else {
imagesListArray = [UIImage]()
}
}
override func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(self.namesListArray, forKey: "namesListArray")
aCoder.encodeObject(self.imagesListArray, forKey: "imagesListArray")
}
override func viewDidLoad() {
let dir = getUserDir()
let archiveName = "\(dir)/iRecipeList-namesListArray"
if let loaded: AnyObject = NSKeyedUnarchiver.unarchiveObjectWithFile(archiveName) {
self.namesListArray = (loaded as? [String])!
}
let archiveImage = "\(dir)/iRecipeList-imagesListArray"
if let loaded: AnyObject = NSKeyedUnarchiver.unarchiveObjectWithFile(archiveImage) {
self.imagesListArray = (loaded as? [UIImage])!
}
}
override func viewDidAppear(animated: Bool) {
}
func sendDetailsToMVC (name: String, image: UIImage) {
namesListArray.append(name)
imagesListArray.append(image)
let dir = getUserDir()
let archiveName = "\(dir)/iRecipeList-namesListArray"
NSKeyedArchiver.archiveRootObject(namesListArray, toFile: archiveName)
let archiveImage = "\(dir)/iRecipeList-imagesListArray"
NSKeyedArchiver.archiveRootObject(imagesListArray, toFile: archiveImage)
tableView.reloadData()
}
func getUserDir() -> String {
let userDir = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
return userDir[0] as! String
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return namesListArray.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let row = indexPath.row
let name = namesListArray[row]
println("\(row)/")
let image = imagesListArray[row]
var cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: nil)
cell.textLabel?.text = name
cell.imageView!.image = image
return cell }
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var row = indexPath.row
var name = namesListArray[row]
delegateName?.sendName(name)
var image = imagesListArray[row]
delegateImage?.sendImage(image)
performSegueWithIdentifier("goToInfoVC", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "newReciep" {
var vc = segue.destinationViewController as! DetailsViewController
vc.delegateDetails = self
}
} }
以及:
我似乎无法正确地将此信息发送到最后一个视图控制器。有人有什么想法吗
PS:很抱歉图像太多,我想这会很有帮助。您当前正在调用sendName和sendImage代理,然后再为它们赋值。这就是他们无法访问您的InformationViewController的原因。你应该这样做:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "newReciep" {
var vc = segue.destinationViewController as! DetailsViewController
vc.delegateDetails = self
}else if(segue.identifier == "goToInfoVC"){
var vc = segue.destinationViewController as! InformationViewController
let row = self.tableView.indexPathForSelectedRow()?.row
var name = namesListArray[row]
var image = imagesListArray[row]
vc.name = name
vc.image = image
}
}
然后在infoViewController ViewDidLoad方法中,您可以为视图设置名称和图像的值。明白了!对于一个刚起步的人来说,这有点让人困惑,因为有很多方法可以设置一切。我一到家就告诉你!我按你说的做了尝试,但当我点击手机时什么也没发生:/我该怎么办?很抱歉,我看到你的评论太晚了。你解决了吗?是的,我解决了!我通过prepareForSegue设置了所需的信息。我现在的业力是了解更多关于CoreData的信息,以便更轻松地管理这些信息。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "newReciep" {
var vc = segue.destinationViewController as! DetailsViewController
vc.delegateDetails = self
}else if(segue.identifier == "goToInfoVC"){
var vc = segue.destinationViewController as! InformationViewController
let row = self.tableView.indexPathForSelectedRow()?.row
var name = namesListArray[row]
var image = imagesListArray[row]
vc.name = name
vc.image = image
}
}