Iphone wait_fences:未能接收回复:10004003(再次)

Iphone wait_fences:未能接收回复:10004003(再次),iphone,objective-c,ios5,wait-fences,Iphone,Objective C,Ios5,Wait Fences,又一次关于这一警告的呼救声 首先,我看了其他地方的所有问题,似乎没有一个适合我的情况。它与警报框和重新指定为第一响应者无关,也与在显示视图之前执行任何动画无关。我的问题发生在实例化基于UIView的自定义键盘时 第二,我相信我可以随意让警告出现/消失。我只是很困惑为什么,所以我更多的是寻求解释而不是解决办法 这里有太多的代码要发布,因此我将简要介绍正在进行的工作: ViewController“Calc”在VC的loadView方法中实例化基于UIView的自定义“DataView”,然后将其添

又一次关于这一警告的呼救声

首先,我看了其他地方的所有问题,似乎没有一个适合我的情况。它与警报框和重新指定为第一响应者无关,也与在显示视图之前执行任何动画无关。我的问题发生在实例化基于UIView的自定义键盘时

第二,我相信我可以随意让警告出现/消失。我只是很困惑为什么,所以我更多的是寻求解释而不是解决办法

这里有太多的代码要发布,因此我将简要介绍正在进行的工作:

ViewController“Calc”在VC的loadView方法中实例化基于UIView的自定义“DataView”,然后将其添加为VC的子视图

“DataView”在DataView的init方法中实例化一个基于自定义UITextField的“TextFieldKPD”

“TextField”在TextField的init方法中实例化一个基于UIView的自定义“小键盘”,并将该小键盘分配给TextField的inputView

“键盘”创建13个UIButtonTypeCustom类型的UIButton按钮,读入并为每个按钮指定“按下”和“未按下”图像,以及设置按钮的操作。然后,它将每个按钮添加为自身的子视图。(通过控制键盘的UIView生命周期中何时发生这种构造,我可以实现wait_fences警告:见下文。)

“Calc”ViewController是最初呈现给用户的视图控制器。我已经追踪到wait_fences警告发生在Calc的viewDidLayoutSubViews方法结束之后,调用其ViewDidAppease方法之前。请注意,当显示Calc时,键盘不可见

我似乎能够通过改变键盘的构造方式来控制wait_fences警告的动作:

  • 如果UIButtons被实例化并作为子视图添加到键盘的init方法中,那么我将得到警告,一次又一次

  • 相反,如果在键盘的LayoutSubView方法中实例化并添加按钮,则不会显示警告。(但在我点击文本字段之前,键盘并没有得到有效的构造——不过,也没有等待警告)

Calc的loadView中没有动画或任何内容。它是实例化和分配的所有方式下来

对这个版本的wait_fences有什么评论吗

编辑1,1月30日-现在更加混乱

今天早上我很无聊,所以我决定玩我的代码,看看是否可以更好地隔离警告的生成。我将其缩小到以下完全无用的代码,现在可以使用这些代码触发警告:

-(void)loadImages
{
    UIImage* image;

    for(int i=0; i<16; i++) {
        image = [UIImage imageNamed:@"StupidFileNameThatDoesNotExist"];
    }
}
以及:

使用NSLog语句控制警告的外观

编辑4,2月2日-欢迎来到厄运神庙

将Allen的评论牢记在心,我将键盘重建为XIB并加载,而不是手动构建视图。当然,这并没有解决任何问题。我曾希望Nib加载将发生在导致问题的任何情况之外


我的直觉是,我在Calc的loadView和一些内部iOS活动中遇到了竞争条件。如果我在loadView内做了太多的工作,那么我就会越过这条线,发出等待围栏警告。键盘是一种症状,而不是根本原因。这可能是任何活动,只是在警告开始出现之前,键盘工作是我做的最后一件事。我只是希望我真的知道我实际上是在穿越什么限制,而不是在黑暗中跌跌撞撞。

我以前有过几次这样的问题,并试图找到解决方案。据一位苹果工程师说,这是一个内部引起的问题,第三方开发者不必担心。据我所知,它不应该导致你的应用程序崩溃或引起任何问题,除了调试器中一个非常恼人的错误,它似乎会让所有开发人员发疯


很抱歉,我无法提供更多帮助。

我以前曾多次遇到此问题,并试图找到解决方案。据一位苹果工程师说,这是一个内部引起的问题,第三方开发者不必担心。据我所知,它不应该导致你的应用程序崩溃或引起任何问题,除了调试器中一个非常恼人的错误,它似乎会让所有开发人员发疯


很抱歉,我无法提供更多帮助。

据我所知,当子视图(例如UIAlertView)在其父视图/超级视图之前创建时,问题似乎会发生。与响应者链有关


尝试移动视图代码以修复问题或粘贴相关部分。

据我所知,关于代码描述,当子视图(例如UIAlertView)在其父视图/超级视图之前创建时,问题似乎会发生。与响应者链有关


尝试移动视图代码以修复问题或粘贴相关部分。

当错误地从后台线程运行UIKit代码时,我遇到了wait_fences错误。听起来这似乎不是你的问题,但如果你还没有,那是另一件需要研究的事情。

我在错误地从后台线程运行UIKit代码时遇到了wait_fences错误。听起来这不是你的问题,但如果你还没有,那就另当别论了。

据我所知。 在调用UIAlertView的同时,在UIView上执行某些操作时,会出现此警告。 为了解决这个问题,我们当时不需要在UIView上执行操作。 为此,我们可以做以下两件事之一: 1.我们可以打电话给UIAl
-(void)loadImages
{
    // Iterate over button definitions and cache the required images
    for(int i=0; i<numKeys; i++) {

        if (![imageCache imageExistsForTag:keyTags[i]]) {
            [imageCache addImageFile:[NSString stringWithFormat:@"%s_NP.png",keyNames[i]] forTag:keyTags[i]];
        }

        if (![imageCache imageExistsForTag:keyTags[i]+pressedOffset]) {
            [imageCache addImageFile:[NSString stringWithFormat:@"%s_P.png",keyNames[i]] forTag:keyTags[i]+pressedOffset];
        }

    }

}
-(void)addImageFile:(NSString*)imageFile forTag:(int)tag
{
    NSLog(@"Adding tag:%d for file %@", tag, imageFile);
}