didEnterRegion 中的 UI 更新?

Posted

技术标签:

【中文标题】didEnterRegion 中的 UI 更新?【英文标题】:UI update in didEnterRegion? 【发布时间】:2015-05-14 16:06:52 【问题描述】:

我正在制作一个使用 CLLocationManager 使用地理围栏的应用程序。我已经实现了这两种方法,并且它们都被适当地调用了:

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region

    [self updateUI]; // update the UI


- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region

    [self updateUI]; // update the UI

我正在一个名为 updateUI 的方法中进行一组 UI 更新,如下所示:

- (void)updateUI

    // Update labels, constraints, alphas and similar

updateUI 在 didEnterRegion 和 didExitRegion 中被调用,但这引发了几个问题:

当应用在后台时如何工作? 我应该检测应用是打开还是在后台,然后在 viewWillAppear 中更新 UI? 如果在这些 didEnterRegion 和 didExitRegion 中更新 UI 是一件坏事,那么这样做的后果是什么?

谢谢!

埃里克

【问题讨论】:

【参考方案1】:

如果您的应用在通知到达时不在前台,则不会在前台。因此,此时对接口做任何事情都没有什么意义,因为实际上没有接口。只需以某种方式处理通知 - 即记下发生的事情 - 然后停止。此时你的工作是尽快离开那里,让应用程序重新进入睡眠状态。下次您的应用出现在最前面(变为活动状态)时,您将收到 that 的通知,现在您可以使界面与数据匹配。 p>

【讨论】:

是的,我将在 NSUserDefaults 中创建一个字符串或其他内容,然后在 viewWillAppear 中读取并确定是否需要进行任何 UI 更新。如何检查应用是在前台还是后台? 真的吗?您不知道如何询问应用程序是后台还是前台?真的吗? 是的,对不起。我想通了.. 不过谢谢! 那么,如果我在应用程序被终止时更改了 didEnterRegion 中的 VC,这些更改会被忽略并忘记吗?我记得当应用程序被杀死时在 didEnterRegion 中显示 UIAlertView 会在应用程序重新打开时显示警报,这是为什么呢? @Erik 如果您在后台运行,我认为不会忘记界面更改。但在我看来,总的来说,那里存在一种违反 MVC 的行为;除非用户即将看到界面,否则更新界面是没有意义的。 - 确实,显示警报是一种将后台应用程序强制置于前台的技巧,但在我看来,这就是一个技巧。

以上是关于didEnterRegion 中的 UI 更新?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 中的 didEnterRegion - 区域监控

didEnterRegion 信标管理器方法返回一个主要和次要为零的区域

闪亮的 ui.R - 标签中的错误(“div”,列表(...)) - 不确定错误在哪里

F# & WPF:基本的 UI 更新

BackgroundWorker UI不会更新Windows Phone 7中的进度

未调用 didEnterRegion 但在目标 C 中调用了 didExitRegion