iOS 17 UIKit中Tip的@Parameter宏失效及调试方法咨询
问题:TipKit结合@Parameter宏时shouldDisplay始终为false,及调试方法咨询
原问题描述
我尝试通过@Parameter宏实现条件式弹出TipKit提示框,移除@Parameter宏后功能正常,但当前回调中shouldDisplay始终返回false,无法正常触发提示。
测试代码
AppDelegate代码
try? Tips.resetDatastore() Tips.showAllTipsForTesting() try? Tips.configure()
Tip定义代码
struct MyTipWithTheParam: Tip { var title: Text { Text(NSLocalizedString("title","Title"))) } var message: Text? { Text(NSLocalizedString("message","Message")) } var image: Image? { Image(systemName: "somesystemicon") } @Parameter static var shouldShow: Bool = false var rules: [Rule] { [ #Rule(Self.$shouldShow) { $0 == true } ] } }
UIViewController相关代码
// member vars for UIViewController private var featureTip = MyTipWiththeParam() private var tipObservationTask: Task<Void, Never>? private weak var tipPopoverController: TipUIPopoverViewController? override func viewDidAppear(_ animated: Bool) { tipObservationTask = tipObservationTask ?? Task { @MainActor in for await shouldDisplay in featureTip.shouldDisplayUpdates { if shouldDisplay { log.debug("Should display is true in the TipPopoverCoordinator") let popoverController = TipUIPopoverViewController(featureTip, sourceItem: sourceView) viewController.present(popoverController, animated: true) tipPopoverController = popoverController } else { log.debug("Should display is false in the TipPopoverCoordinator") if viewController.presentedViewController is TipUIPopoverViewController { viewController.dismiss(animated: true) tipPopoverController = nil } } } } MyTipWithTheParam.shouldShow = true }
我观察到回调触发了两次,但shouldShow的评估结果都是false。移除@Parameter宏后提示能正常显示,但设置shouldShow = true后shouldDisplay仍为false。
问题解决更新
已定位问题:本地化文件中缺少message对应的字符串,导致NSLocalizedString返回空值。确保message字符串非空后,提示框正常显示。
但该验证错误没有任何控制台日志提示,若能添加日志会更便于排查。
后续疑问
仍想了解:
- TipKit中
shouldDisplay布尔值的判定逻辑是什么? - 开发者应如何调试
shouldDisplay的计算过程?
内容的提问来源于stack exchange,提问作者TheJeff
相关产品推荐
相关产品推荐

