ios - SWIFT - 在 vi​​ewdidload 之外看不到属性(property)

标签 ios swift viewdidload

我尝试将一个字符串从 VC1 传递到 VC2,但是传递到属性 detailItem 的 tex 值只加载到 viewdidload,而不是函数中

View Controller 1:

@IBOutlet var tex: UITextField!
// Prepare fore segue pass the value of txt

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  if segue.identifier? == "Todo" {
    let navVC = segue.destinationViewController as UINavigationController
    let itemVC: ChecklistViewController = navVC.topViewController as ChecklistViewController
    itemVC.detailItem! = tex.text
  }
 }

View Controller 2:

var detailItem : String!

// I can see the value of tex only in the ViewDidLoad

override func viewDidLoad() {
  super.viewDidLoad()

  println("viewDidLoad \(detailItem)")
  tableView.rowHeight = 44
}

// Here and in  the function below result nil.
required init(coder aDecoder: NSCoder) {
  println("print init \(detailItem)")
  items = [ChecklistItem]()
  super.init(coder: aDecoder)
  loadChecklistItems()
}

func documentsDirectory() -> String {
  let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as [String]
  return paths[0]
}

func dataFilePath() -> String {
  println("print path\(detailItem)")
  return documentsDirectory().stringByAppendingPathComponent("Checklists.plist")
}

func saveChecklistItems() {
  let data = NSMutableData()
  let archiver = NSKeyedArchiver(forWritingWithMutableData: data)
  archiver.encodeObject(items, forKey: "ChecklistItems")
  archiver.finishEncoding()
  data.writeToFile(dataFilePath(), atomically: true)
  println("print save\(detailItem)")
}

func loadChecklistItems() {
  let path = dataFilePath()
  if NSFileManager.defaultManager().fileExistsAtPath(path) {
    if let data = NSData(contentsOfFile: path) {
      println("print load\(detailItem)")
      let unarchiver = NSKeyedUnarchiver(forReadingWithData: data)
      items = unarchiver.decodeObjectForKey("ChecklistItems") as [ChecklistItem]
      unarchiver.finishDecoding()
    }
  }
}

控制台输出:

print init 
print path
print load
viewDidLoad Antwerp

谢谢阿尔贝托

最佳答案

原因是因为当 prepareForSegue 被调用时你的 viewcontroller 2 已经被创建并且 viewDidLoad 已经被调用。

查看 This Link因为它对 View 生命周期有很好的描述

关于ios - SWIFT - 在 vi​​ewdidload 之外看不到属性(property),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29394337/

相关文章:

swift - SIGABRT 与 Xcode 使用 Swift

iOS,无法委托(delegate)viewDidLoad之外

ios - IBAction 没有声音和动画,swift

ios - UICollectionView 的 viewDidLoad 大小不正确

iOS 4.0 后台任务完成

ios - 使用 WebView 打开 .odp、.odt、.ods 文件

ios - FirebaseFirestore 可以在 iOS 应用扩展中使用吗?

ios - swift - 如何在应用程序运行时顺利加载谷歌地图 View

swift - 如何将 "Text(example1: "ex 1", example2: "ex 2")"转换为可用的字典

ios - NSNotification 观察者 - NSManagedObjectContextDidSave