Swift:为什么本地化有时需要添加观察器才能使其工作,但有时不需要



我开发了一个需要使用本地化的应用程序,所以我为我的应用程序选择了这个漂亮的库。 但我只是混淆了他们的文档中提到他们需要使用观察者通知来倾听语言何时发生变化。 但是在我的主控制器中,我只是按照他们所说的去做,它就像一个魅力,但是当我向侧边栏文本添加本地化时。我收到此错误:

原因:"-[NSConcrete通知长度]:发送到实例0x107cbb9f0的无法识别的选择器

但是如果我删除侧边栏控制器内的观察器。 它会正常工作。所以我的问题是为什么有些控制器需要添加一个观察器来工作,而有些控制器不需要添加它来工作

这是我的侧边栏控制器:

override func viewWillAppear(_ animated: Bool) {
NotificationCenter.default.addObserver(self, selector: #selector(setText), name: NSNotification.Name(LCLLanguageChangeNotification), object: nil)     
}
deinit {
NotificationCenter.default.removeObserver(self)
}
@objc func setText(status: String) {
item = "item".localized(using: "NavigationDrawerViewController")
}

这是ChooseLanguageController:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
var selectedCell:UITableViewCell = tableView.cellForRow(at: indexPath)!
Localize.setCurrentLanguage(availableLanguages[indexPath.row])
mytable.reloadData()
}

如果我的英语看起来很困惑,提前抱歉

选择器的签名必须具有Notification作为参数,而不是String。喜欢这个

@objc func setText(notification: Notification) {
}

从文档

指定接收方发送的消息的选择器 观察者通知它通知发布。方法 由 aSelector 指定的参数必须只有一个(一个 NSNotization的实例(。

有关更多详细信息,请参阅 addObserver(_:selector:name:object:(

最新更新