gpt4 book ai didi

ios - 刷新数据后 IBOutlet nil

转载 作者:行者123 更新时间:2023-11-28 09:08:22 25 4
gpt4 key购买 nike

我正在使用 XCode 6.3.1,我遇到了一个我无法解决的奇怪问题。

我的 Storyboard 上有一个 View Controller,它使用模式转场打开。当 ViewController 打开时,它从我的后端(解析)加载一些数据,它首先查看缓存并显示缓存数据(如果存在),同时在后台检索来自服务器的更新数据。接下来的过程是:

  1. 获取缓存数据
  2. 如果存在缓存数据则更新接口(interface)
  3. 请求服务器数据(在后台)
  4. 数据到达时更新接口(interface)

在第 4 步之前一切正常。当我尝试刷新我的界面时,我的 @IBOutlets 突然有一半是 nil,当然应用程序崩溃了。

我错过了什么??

代码如下:

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.

//eventId is set when the ViewController is instantiated
if eventId != nil {
loadEvent(eventId)
}
}

func loadEvent(id: String) {

var query = Event.query()
query?.cachePolicy = Util.getCachePolicy() //First look in cache, the request network data
query?.getObjectInBackgroundWithId(id, block: { (event: PFObject?, error: NSError?) -> Void in

if error == nil {

var updatedEvent = event as! Event
self.event = updatedEvent
self.updateLayout()
//When self.updateLayout() is called with cached data
//all my IBOutlets are fine but when it's called the second time,
//with data from server half of the IBOutlets are nil
}
})
}

func updateLayout() {

if event != nil {

eventTitle.text = event.name

var paletteColor : UIColor!
var location = event.location
var locationName = location["name"] as! String
eventLocation.text = NSString(format: NSLocalizedString("event_subtitle", comment: ""), event.formattedTimes(), locationName) as String

eventDescription.text = event.abstract

if event.paletteColor != 0 {
paletteColor = Util.colorFromInt(event.paletteColor)
eventHeader.backgroundColor = paletteColor
speakersBlockTitle.textColor = paletteColor
mapButton.tintColor = paletteColor
}

if event.hasPhoto() {

self.eventPhoto.file = event.eventPhoto
self.eventPhoto.loadInBackground({ (image:UIImage?, error:NSError?) -> Void in
UIView.animateWithDuration(0.5, animations: { () -> Void in

self.eventPhoto.alpha = 1.0
})
})

} else {
self.eventPhoto.removeFromSuperview()
if paletteColor == nil {
paletteColor = eventHeader.backgroundColor
}
actionBar.backgroundColor = paletteColor
}

if event.speaker.isDataAvailable() {

var speaker = event.speaker
speakerName.text = speaker["name"] as? String
speakerInfo.text = speaker["speakerInfo"] as? String
speaker["speakerPhoto"]?.getDataInBackgroundWithBlock({ (imageData:NSData?, error:NSError?) -> Void in
if error == nil {
self.speakerPhoto.image = UIImage(data:imageData!)
self.speakerPhoto.layer.cornerRadius = self.speakerPhoto.frame.size.width/2
self.speakerPhoto.clipsToBounds = true
}
})
} else {
speakerBlock.removeFromSuperview()
}

UIView.animateWithDuration(0.5, animations: { () -> Void in

self.eventHeader.alpha = 1.0
self.eventDescription.alpha = 1.0
self.speakerBlock.alpha = 1.0
self.mapButton.alpha = 1.0
})
}
}

这是所有零 IBOutlets: This are all the nil IBOutlets:

最佳答案

由于我上面评论中的代码显示不正确,这里再次评论:

像这样:

@IBOutlet weak var myOutlet: UIButton! {
didSet {
if myOutlet == nil {
// put a breakpoint on the next line
println("myOutlet set to nil")
}
}
}

关于ios - 刷新数据后 IBOutlet nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30248662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com