核心数据swift建议不要将数据推送到第二视图控制器

时间:2014-11-30 00:19:04

标签: ios swift core-data xcode6.1

我有一个表视图,我想选择一个项目,让它在第二个视图控制器中显示该项目的所有数据。这是我试图使用的代码。

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "showTea"){
        let selectedIndexPath:NSIndexPath = self.tableView.indexPathForSelectedRow()!
        let genView:genViewController = segue.destinationViewController as genViewController
        genView.teaname = selectedIndexPath

我收到以下错误。 'NSIndexPath'不能转换为'UILabel'我相信我错过了一些简单但我没有找到它的东西。

我以这种方式保存数据。

    @IBAction func addItem(sender: AnyObject) {
    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context: NSManagedObjectContext = appDel.managedObjectContext!
    let en = NSEntityDescription.entityForName("Items", inManagedObjectContext: context)
    var newItem = dataModel(entity: en!, insertIntoManagedObjectContext: context)
    newItem.name = Name.text
    newItem.type = Type.text
    newItem.amount = qty.text
    newItem.temp = temp.text
    newItem.time = time.text

    context.save(nil)

    self.navigationController?.popViewControllerAnimated(true)

}

感谢所有帮助。不确定这是否是完成它的最佳方式但它的工作原理。 genViewContorller下面。

var myData: Array<AnyObject> = []
@IBOutlet var name: UILabel!
@IBOutlet var type: UILabel!
@IBOutlet var qty: UILabel!
@IBOutlet var temp: UILabel!
@IBOutlet var time: UILabel!

var row: Int = 0
var tn: String = ""
var ty: String = ""
var qtyl: String = ""
var templ: String = ""
var timel: String = ""

override func viewDidLoad() {
    super.viewDidLoad()

    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context: NSManagedObjectContext = appDel.managedObjectContext!
    let freq = NSFetchRequest(entityName: "Items")
    myData = context.executeFetchRequest(freq, error: nil)!
    var data: NSManagedObject = myData[row] as NSManagedObject
    var ty = data.valueForKey("type") as String
    var tn = data.valueForKey("name") as String
    var qtyl = data.valueForKey("amount") as String
    var templ = data.valueForKey("temp") as String
    var timel = data.valueForKey("time") as String
    self.name.text = "\(tn)"
    self.type.text = "\(ty)"
    self.qty.text = "\(qtyl)"
    self.temp.text = "\(templ)"
    self.time.text = "\(timel)"

我正在获取通过segue传递的行值,并使用它来获取该行中每个字段的值。

1 个答案:

答案 0 :(得分:1)

您正尝试将NSIndexPath分配给UILabel。编译错误非常清楚。

请注意,您无法直接更新@IBOutlets,因为它们尚未设置(它们仍为nil)。您需要将值存储在目标视图控制器的属性中,然后在viewDidLoad中更新标签。

  1. genViewController中添加一个属性以保存您的值。

    var row: Int = 0
    
  2. prepareForSegue

    中设置值
    genView.row = selectedIndexPath.row
    
  3. ViewDidLoad genViewController设置标签:

    self.teaname.text = "I came from row \(row)"