gpt4 book ai didi

ios - 在准备 Segue 中实例化的变量在 ViewDidLoad 中具有 nil 属性

转载 作者:行者123 更新时间:2023-11-30 13:31:10 25 4
gpt4 key购买 nike

在模型提供核心位置数据之前,我的 View Controller 正在加载。

我有一个主视图 Controller ,它以模态方式推送一个带有两个 NSManagedObject 子类(记录和位置)的新 View Controller ,这些子类在 prepareForSegue 方法中实例化。

if segue.identifier == "newRecord"
{
let controller = (segue.destinationViewController as! NewRecordVC)

let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate // instantiate the delegate methods in AppDelegate

let managedContext = appDelegate!.managedObjectContext // create context from delegate methods

let recordEntity = NSEntityDescription.entityForName("RecordData", inManagedObjectContext: managedContext)
let locationEntity = NSEntityDescription.entityForName("Location", inManagedObjectContext: managedContext)

controller.location = Location(entity: locationEntity!, insertIntoManagedObjectContext: managedContext)
controller.record = Record(entity: recordEntity!, insertIntoManagedObjectContext: managedContext)
controller.managedContext = appDelegate?.managedObjectContext
print("segueing")
}

两个托管对象都有不同值的init。记录具有分配给新 View 上显示的属性的简单预分配值。然而,位置属性主要需要位置服务来分配属性值。打印属性值表明,虽然在 viewDidLoad 中实例化位置,但位置服务分配的位置属性仍然为零。位置服务正在工作 - 属性从模型内打印,但这是在 viewDidLoad 之后。加载时,我至少需要 geoPlacemark 属性,它为 View 提供文本。

    override func viewDidLoad()
{
super.viewDidLoad()
...
if let recordNotNil = record
{
...
iD.text = "ID: \(recordNotNil.iD)"
}

if let locationNotNil = location
{
...
print("bing")
print(locationNotNil.temp)
record!.location = location!
print(location.geoPlacemark)
print(location.timestamp)
if let geoPlacemarkNotNil = location.geoPlacemark
{
print("bong")
locationText(geoPlacemarkNotNil)
}
}
}

我是否必须从每个 View Controller 而不是模型中运行位置服务?或者有没有办法让 View 等待位置委托(delegate)方法?

最佳答案

prepareForSegue() 中,destinationViewController 已经实例化,并且 viewDidLoad() 已经被调用。如果你想设置一个标签,你应该在 viewWillAppear()

中进行
override func viewWillAppear() {
super.viewWillAppear()

// Set up your views here
}

viewDidLoad() 相比,viewWillAppear() 的另一个好处是每次 ViewController 即将显示时都会调用它,这在 VC 期间可能会多次调用生命周期 - 与 viewDidLoad() VC 生命周期开始时的单个调用相反。

关于ios - 在准备 Segue 中实例化的变量在 ViewDidLoad 中具有 nil 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36569608/

25 4 0
文章推荐: c# - System.Timers.Timer() 由于 Elapsed Events 的聚合而多次触发
文章推荐: javascript - 媒体元素 : how to get instance of the player
文章推荐: C# 在关闭应用程序后打开文件
文章推荐: javascript - 使用 javascript 知道最接近的选择器后,选择下一个
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com