【发布时间】:2018-06-16 19:20:32
【问题描述】:
我有一个带有按钮的 main.storyboard,我需要根据应用是通过家庭 Wifi 网络还是通过云连接到某个设备来更改图像。我给按钮一个标签号。
在 viewDidLoad 中,我检查连接并在需要时更改图像。我是通过
let myButton = view.viewWithTag(int) as! UIButton
myButton.setImage(UIImage(named: “imageName.png”), for .normal)
我的 viedDidLoad 看起来像这样
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(setHomeMenuButton), name:NSNotification.Name(rawValue: "refresh"), object: nil)
checkSavedHomeyAccessData() // get Homey's url data from disk if there are
if appStageLevel > 0 && firstStartAppFlag {
firstStartAppFlag = false
let flag = checkDataStore()
if flag == 2 { // store is already filled, then get iconViews
DeviceService.getDevicesNameArray()
getIconFiles()
}
}
manageViewBasedAppStageLevel() // setup views based on stage
let networkName = currentSSID()
timerMapCapabilitiesUpdate()
}
直到今天它都运行良好。我在 viewDidLoad 函数中添加了一个新的函数调用,应用程序在启动后直接崩溃,告诉我 'let myButton = ...' 的行意外发现为 nill。
这是现在从 viewDidLoad 调用的函数:
func timerMapCapabilitiesUpdate() {
let mapCapabilityArray = getMapCapabilityArray()
_ = Timer.scheduledTimer(withTimeInterval: 20, repeats: true, block: { (timer) in // 1
if self.currentReachabilityStatus != .notReachable {
if mapCapabilityArray.count != 0 {
for capabilityOnMap in mapCapabilityArray {
getLiveData2Values(tag : capabilityOnMap.tag)
} // for deviceOnMap
} // if mapDeviceArray
} else {
if let viewWithTag = self.view.viewWithTag(6) {
viewWithTag.isHidden = false
self.view.bringSubview(toFront: viewWithTag)
// print("No Internet Connection")
}
} // if internet available
}) // end timer block
} // end timerMapDevicesUpdate
在我看来,这意味着在 viewDidLoad 方法开始之前没有加载故事板。因为如果故事板被加载,展开不会产生“nill”。有人知道如何解决这个问题吗?
【问题讨论】:
-
您可以从情节提要中删除按钮或更改其标签
-
是的,我也考虑过,但不幸的是这不是原因
-
当您说“添加了对 viewDidLoad 的新函数调用”时,您添加了什么或者您的意思是您在代码中某处调用 viewDidLoad。此外,如果它来自故事板,为什么不使用 IBOutlet 来代替?
-
请分享更多代码以获取上下文
-
@UpholderOfTruth - 我添加了对具有计时器功能的方法的调用。
标签: ios swift ipad storyboard