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 与 UIActivityIndicatorView
UIAlertView wait_fences:未能收到回复:10004003
wait_fences:未能收到回复:10004003 - viewDidLoad
当我从另一个警报创建警报时,我得到 wait_fences: failed to receive reply
RMUniversalAlert 的错误 - UIAlertView+Blocks/UIAlertView+Blocks.h 未找到