UIAlertView:wait_fences:未能收到回复:10004003

Posted

技术标签:

【中文标题】UIAlertView:wait_fences:未能收到回复:10004003【英文标题】:UIAlertView: wait_fences: failed to receive reply: 10004003 【发布时间】:2011-03-04 11:27:57 【问题描述】:

我正在后台运行网络请求,我希望用户能够取消此请求。在 Web 请求运行时,我使用带有取消按钮的 UIActionSheet。当 Web 请求返回错误时,我通过调用 DismissWithClickedButtonIndex(0, true) 关闭 UIActionSheet。然后我会显示一个带有错误消息的 UIAlertView 以及取消或重试 Web 请求的选项。

大部分时间一切正常,但有时我会在控制台输出窗口中收到“wait_fences: failed to receive reply: 10004003”消息,顺便说一下有一些奇怪的 UI 行为。

我做了一些搜索,发现这是由于底层视图在控制转移到 UIAlertView 之前无法获得控制。有人建议使用 PerformSelector 延迟显示 AlertView。这是正确的解决方案吗?如果是这样,如何将 UIAlertView 的 Show 方法传递给 PerformSelector 方法的第一个参数?

目前我使用这个解决方案来解决延迟问题:

private void StartAfterParentViewUpdate(NSAction action)

    NSAction delayedAction = () => BeginInvokeOnMainThread(action);
    NSTimer.CreateScheduledTimer(new TimeSpan(0, 0, 0, 0, 200), delayedAction);

这样我可以调用 StartAfterParentViewUpdate(_alertView.Show) 并且我猜它会在主 UI 线程上运行,只要线程可以处理它。这是正确的还是有更好的方法来解决这个问题?

【问题讨论】:

【参考方案1】:

回答我自己的问题:解决方案效果很好,我再也没有看到 wait_fences 消息。我制作了一个静态助手,可以在任何类中使用:

public static class UIHelper

    public static void StartAfterParentViewUpdate(NSObject parent, NSAction action)
    
        NSTimer.CreateScheduledTimer(new TimeSpan(0, 0, 0, 0, 100), () => parent.BeginInvokeOnMainThread(action));
    

    // Use this helper method only when action is a non-static member of an object.
    public static void StartAfterParentViewUpdate(NSAction action)
    
        StartAfterParentViewUpdate((NSObject)action.Target, action);
    

如果您需要延迟对带有参数的方法的调用,请使用匿名委托。示例:

    NSAction action = () =>  viewController.NavigationController.PopViewControllerAnimated(true); ;
    UIHelper.StartAfterParentViewUpdate(viewController, action);

【讨论】:

以上是关于UIAlertView:wait_fences:未能收到回复:10004003的主要内容,如果未能解决你的问题,请参考以下文章

wait_fences:未能收到回复:10004003 错误 - UIAlertView 与 UIActivityIndi​​catorView

UIAlertView wait_fences:未能收到回复:10004003

wait_fences:未能收到回复:10004003 - viewDidLoad

当我从另一个警报创建警报时,我得到 wait_fences: failed to receive reply

RMUniversalAlert 的错误 - UIAlertView+Blocks/UIAlertView+Blocks.h 未找到

为啥我会收到此代码的“wait_fences:未能收到回复”?