Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在错误的时间查看NSLog_Objective C_Cocoa Touch_Uiimageview_Nstimer_Nslog - Fatal编程技术网

Objective c 在错误的时间查看NSLog

Objective c 在错误的时间查看NSLog,objective-c,cocoa-touch,uiimageview,nstimer,nslog,Objective C,Cocoa Touch,Uiimageview,Nstimer,Nslog,我有两层。底层由隐藏的UIImageView组成,上层由可见的UIImageView组成。里面有标签。当底层UIImageView的所有帧与上层UIImageView的帧相等且标签也匹配时,您必须在NSLog中看到这一点。问题是,当所有标签都不匹配时,我仍然会得到NSLog。该方法由NSTimer调用 这是我的代码: -(void)allPiecesCorrectPos { __block BOOL equal = YES; [arrayImg enumerat

我有两层。底层由隐藏的UIImageView组成,上层由可见的UIImageView组成。里面有标签。当底层UIImageView的所有帧与上层UIImageView的帧相等且标签也匹配时,您必须在NSLog中看到这一点。问题是,当所有标签都不匹配时,我仍然会得到NSLog。该方法由
NSTimer
调用

这是我的代码:

-(void)allPiecesCorrectPos {

        __block BOOL equal = YES;
        [arrayImg enumerateObjectsUsingBlock:^(UIImageView *ImageView1, NSUInteger idx, BOOL *stop) {
            UIImageView *ImageView2 = HiddenFieldView[idx];
            if (CGRectIntersectsRect(ImageView1.frame, ImageView2.frame) && ImageView1.tag != ImageView2.tag) {

                equal = NO;
                *stop = YES;
            }
        }];
        if (equal) {
            NSLog(@"ALL THE FRAMES ARE EQUAL");
            [AllPosCorrectTimer invalidate];

        }
    }

我如何解决这个问题?

像这样尝试,这里每次的相等值都是YES,因为您的if块在块执行完成之前执行,在这种情况下,您需要注意块执行

-(void)allPiecesCorrectPos {

        __block BOOL equal = YES;
        [arrayImg enumerateObjectsUsingBlock:^(UIImageView *ImageView1, NSUInteger idx, BOOL *stop) {
            UIImageView *ImageView2 = HiddenFieldView[idx];
            if (CGRectIntersectsRect(ImageView1.frame, ImageView2.frame) && ImageView1.tag != ImageView2.tag) {

                equal = NO;
                *stop = YES;
            if (equal) {
            NSLog(@"ALL THE FRAMES ARE EQUAL");
            [AllPosCorrectTimer invalidate];

            }
            }
        }];

    }

您的代码没有执行您在文本中所说的操作。您正在测试UIImageView图幅的交点是否相等。试试这个(为了便于阅读,我随意重命名了一些方法和变量):

阅读更多关于逻辑条件及其组合的信息。如果这不是你想要的,澄清你的问题


我还建议您停止以大写字母开头变量名。大写起始名是最常见的类名。大写起始变量名对于Objective-C来说是一种非常少见的命名约定,它会使其他程序员更难阅读您的代码。(但如果你出于任何原因喜欢这样做,那就继续吧。保持一致性和连贯性)。

这真的是你第四次问基本相同的问题了吗?不,这不是同一个问题。每次我了解到更多。可能重复“否”,这是一个不同的问题,不幸的是,这不起作用。现在,当所有标签都匹配时,我看不到
NSLog
。对不起,这没有任何意义
EnumerateObjectsSusingBlock
同步工作,在枚举所有数组对象之前不会返回。@史蒂文:不,因为我不知道您的数据。你应该添加打印所有相关数据(框架等)的NSLog语句,并将这些信息添加到你的问题中。我认为数据无关紧要。我已经手动检查了标签是否匹配。这很有效。框架的大小也是一样的。@Steven:和你前面的问题一样。你无视别人的建议,只是说“我已经检查过了”。如果你不提供详细的数据,那么没有人能解决这个问题(只能通过猜测)。
-(void)visiblePiecesEquivalentToHiddenPieces
{
    __block BOOL correspondingPiecesEquivalent = YES;
    [imageArray enumerateObjectsUsingBlock:
        ^(UIImageView *imageView1, NSUInteger index, BOOL *stop)
        {
            UIImageView *imageView2 = hiddenFieldView[index];
            if ( !CGRectEqualToRect(imageView1.frame, imageView2.frame)
                 || imageView1.tag != mageView2.tag )
            {    
                correspondingPiecesEquivalent = NO;
                *stop = YES;
            }
        }
    ];
    if (correspondingPiecesEquivalent)
    {
        NSLog(@"Frames and tags are equal for corresponding views.");
        [pieceCorrespondenceTimer invalidate];

    }
}