Ios 导航UI未使用Xcode 9更新
从服务器下载完数据模型后,我尝试更新navigationItem标题视图 大概是这样的:Ios 导航UI未使用Xcode 9更新,ios,swift,xcode,user-interface,uinavigationitem,Ios,Swift,Xcode,User Interface,Uinavigationitem,从服务器下载完数据模型后,我尝试更新navigationItem标题视图 大概是这样的: private func loadNews() { self.newsModelManager.sendRequest(inBackground: false, preSendHandler: { (isReachable) in if isReachable { } else { appDelegate.showInternetFailed
private func loadNews() {
self.newsModelManager.sendRequest(inBackground: false, preSendHandler: { (isReachable) in
if isReachable {
} else {
appDelegate.showInternetFailedAlertView()
}
}, successHandler: { (response) in
print("loadNewsModel: successHandler")
}, errorHandler: { (response) in
print("loadNewsModel: errorHandler")
}, reloginFailHandler: { (response) in
appDelegate.showReloginFailedAlertView()
}) { (isReachable) in
let array = self.newsModelManager.loadFirstFiveNews()!
DispatchQueue.main.async {
self.setupTitle_ViewWith(array: array)
}
}
}
并在seupTitle_视图中使用(数组:)
这一切都很好,直到最后一行self.title\u View=newsttitle\u View
我想这会把我的标题视图更新到我的CustomView,
但这不是。。。。
那里可能出了什么问题
我首先用realm从服务器保存模型,并在let array=self.newsModelManager.loadFirstFiveNews()处读取代码>
但是,假设我的设备中已经有数据,并且不需要先加载就可以直接读取,它完全可以正常工作…我认为您可以通过使用本地通知来解决这个问题
1) 像这样更改loadNews函数
private func loadNews() {
self.newsModelManager.sendRequest(inBackground: false, preSendHandler: { (isReachable) in
if isReachable {
} else {
appDelegate.showInternetFailedAlertView()
}
}, successHandler: { (response) in
print("loadNewsModel: successHandler")
}, errorHandler: { (response) in
print("loadNewsModel: errorHandler")
}, reloginFailHandler: { (response) in
appDelegate.showReloginFailedAlertView()
}) { (isReachable) in
let array = self.newsModelManager.loadFirstFiveNews()!
DispatchQueue.main.async {
NSNotificationCenter.defaultCenter().postNotificationName("refresh", object:array)
}
}
}
2) 然后在ViewController中将其粘贴到viewDidLoad中
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.setupTitle_ViewWith), name: "refresh", object: array)
(三)
我想你可以通过使用本地通知来解决这个问题
1) 像这样更改loadNews函数
private func loadNews() {
self.newsModelManager.sendRequest(inBackground: false, preSendHandler: { (isReachable) in
if isReachable {
} else {
appDelegate.showInternetFailedAlertView()
}
}, successHandler: { (response) in
print("loadNewsModel: successHandler")
}, errorHandler: { (response) in
print("loadNewsModel: errorHandler")
}, reloginFailHandler: { (response) in
appDelegate.showReloginFailedAlertView()
}) { (isReachable) in
let array = self.newsModelManager.loadFirstFiveNews()!
DispatchQueue.main.async {
NSNotificationCenter.defaultCenter().postNotificationName("refresh", object:array)
}
}
}
2) 然后在ViewController中将其粘贴到viewDidLoad中
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.setupTitle_ViewWith), name: "refresh", object: array)
(三)
您好,这里是解决此问题的简要总结,供可能面临类似问题的其他人参考,
@Ian在问题中共享的代码已添加到NavigationController子类中
问题是在这里引起的。由于您无法从导航控制器更新导航标题或标题视图,因此请参阅此答案()
因此,我们尝试从viewController更新标题视图,它解决了我们的问题。嗨,这里是解决此问题的简要总结,供其他可能面临类似问题的人参考,
@Ian在问题中共享的代码已添加到NavigationController子类中
问题是在这里引起的。由于您无法从导航控制器更新导航标题或标题视图,因此请参阅此答案()
因此,我们尝试从viewController更新标题视图,它解决了我们的问题。您是否可以尝试在不使用DispatchQueue.main.async{}blockHi的情况下执行setupTitle_ViewWith(数组:array)刚刚尝试过。毫无疑问,为什么要在isReachable闭包上调用setupTitle_ViewWith()函数而不是successHandler?我希望你应该在下载成功后更新一次视图,对吗?有什么具体原因吗?我在successHandler上将dataModel保存到域中,然后在IsRecable闭包上从域中读取数据…哦,谢谢,所以调用函数似乎没有问题,好的,那么最后一次尝试是否可以尝试使用“DispatchQueue.main.sync”而不是async。是否可以尝试执行setupTitle_ViewWith(array:array)没有DispatchQueue.main.async{}blockHi,只是尝试了一下。毫无疑问,为什么要在isReachable闭包上调用setupTitle_ViewWith()函数而不是successHandler?我希望你应该在下载成功后更新一次视图,对吗?有什么具体原因吗?我在successHandler上将dataModel保存到域中,然后在IsRecable闭包上从域中读取数据…哦,谢谢,所以调用函数似乎没有问题,好的,那么最后一次尝试使用“DispatchQueue.main.sync”可以吗而不是异步。@Ian:谢谢你尝试了我所要求的一切:-)一起解决问题很好。@Ian:谢谢你尝试了我所要求的一切:-)一起解决问题很好。