我有一个表视图,我想选择一个项目,让它在第二个视图控制器中显示该项目的所有数据。这是我试图使用的代码。
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传递的行值,并使用它来获取该行中每个字段的值。
答案 0 :(得分:1)
您正尝试将NSIndexPath
分配给UILabel
。编译错误非常清楚。
请注意,您无法直接更新@IBOutlets
,因为它们尚未设置(它们仍为nil
)。您需要将值存储在目标视图控制器的属性中,然后在viewDidLoad
中更新标签。
在genViewController
中添加一个属性以保存您的值。
var row: Int = 0
在prepareForSegue
。
genView.row = selectedIndexPath.row
在ViewDidLoad
genViewController
设置标签:
self.teaname.text = "I came from row \(row)"