我正在使用带有GoogleMap Autocomplete View控制器的UISearchController将数据发送到我的视图控制器。 我有一个Tabbar控制器,我想将数据发送到我的ViewController A和B. 我已经完成了所有必要的工作,但只有一个ViewController在用户使用UISearchController时得到通知。
当我移动到另一个选项卡时,我尝试将每个选项卡的委托设置为nil,例如,如果我从ViewController A移动到B
我将A的委托设置为nil,然后将B的委托设置为自身。
我对swift有点新意,所以任何人都可以帮助我理解为什么这不起作用?
我已经尝试调试我的代码,看看我的代表是否为nil而不是。
以下是我设置和取消设置委托的方法
Xrm.Page.getAttribute("lookup_fieldname").fireOnChange();
答案 0 :(得分:3)
您需要一个观察者模式,如果您需要一个类实例通知您需要创建一个委托数组(称为观察者)并从该通知程序实例类注册和注销其他许多实例
更多信息Wikipedia Observer Pattern
示例代码
这是必须实现任何观察者类的协议
protocol GeotificationsManagerObserver : NSObjectProtocol{
func nearestGeotificationsHasChanged(pgeotifications:[Geotification])
}
通知程序类
class GeotificationsManager: NSObject {
/**...*//code
fileprivate var observers : [GeotificationsManagerObserver] = []
/**...*//code
}
观察员方法
extension GeotificationsManager
{
func addGeotificationsManagerObserver(observer:GeotificationsManagerObserver)
{
for currentObs in self.observers {
if(observer.isEqual(currentObs))
{
//we don't want add again
return
}
}
self.observers.append(observer)
}
func removeGeotificationsManagerObserver(observer:GeotificationsManagerObserver)
{
var observerIndex = -1
for (index,currObserver) in self.observers.enumerated() {
if(observer.isEqual(currObserver))
{
observerIndex = index
break
}
}
if(observerIndex != -1)
{
self.observers.remove(at: observerIndex)
}
}
//here make the notification to all observers in observers array
func nearestsGeotificationsHasChanged()
{
for currObserver in self.observers {
currObserver.nearestGeotificationsHasChanged(pgeotifications: self.getNearesGeotifications())
}
}
}
重要强> 如果您不需要通知,则必须删除观察者,否则会出现内存问题
示例:您可以在UIViewController
中添加viewDidAppear
作为观察者,可以在viewDidDisappear
中删除