Iphone 调试iPad代码时,如何在UI上看到中间更新?

Iphone 调试iPad代码时,如何在UI上看到中间更新?,iphone,xcode,ipad,Iphone,Xcode,Ipad,我正在开发一个应用程序,其中我使用的是plist文件。plist中有21个键值对。每对是一个字典类型,有6个条目。词典包含一组图像。在我的程序中,我使用路径来检索图像。我的要求是在imageView上逐个显示图像。我做得很成功。图像正从plist中精确显示 所以我的问题是,我可以使用调试器来查看plist的中间执行吗?当我在代码中放置断点并使用调试器运行时,我能够单步执行代码,并且只有在使用21个键值对执行完plist之后,图像才会显示在视图上。调试每一对时,如何在视图上看到图像 (void)s

我正在开发一个应用程序,其中我使用的是plist文件。plist中有21个键值对。每对是一个字典类型,有6个条目。词典包含一组图像。在我的程序中,我使用路径来检索图像。我的要求是在imageView上逐个显示图像。我做得很成功。图像正从plist中精确显示

所以我的问题是,我可以使用调试器来查看plist的中间执行吗?当我在代码中放置断点并使用调试器运行时,我能够单步执行代码,并且只有在使用21个键值对执行完plist之后,图像才会显示在视图上。调试每一对时,如何在视图上看到图像

(void)setSequenceInfo:(NSDictionary *)sequenceInfo
{
    [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    self.sequenceQueue = [NSMutableArray array];

    //load the sequenceinfo dictionary
    [_sequenceInfo release];

    if (!sequenceInfo)
       return;

    _sequenceInfo = [sequenceInfo retain];

    //create one UIImageView by sequence
    NSMutableDictionary* views = [NSMutableDictionary dictionaryWithCapacity:[sequenceInfo count]];
    for (NSString* identifier in _sequenceInfo)
    {
        UIImageView* seqView = [[UIImageView alloc] initWithFrame:self.bounds];
        seqView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
        seqView.contentMode = self.contentMode;

        //the image is hidden until its sequence is played
        seqView.hidden=YES;
        //add the newly created image view to our subviews
        [self addSubview:seqView];
        //also store it in our sequenceViews dictionary
        [views setValue:seqView forKey:identifier];

        [seqView release];
    }
    self.sequenceViews = views;
}

为了在使用调试器时看到中间结果,您必须更改代码的结构以返回主运行循环,以便UIImageView有机会运行并显示新图像。您可以设置一个定期触发的计时器,并在计时器例程中将UIImageView的图像更改为序列中的下一个图像。然后,在gdb中的计时器处理程序方法中设置断点,每次点击该断点时,您应该会看到前面显示的图像

编辑:这里有更多的细节,基于我认为你想要做的。不过,请意识到,我认为在调试器中没有魔术棒可以看到屏幕上的更改。您必须返回到Run循环,以便您的UIKIt小部件能够循环绘制它们自己

例如,假设您有以下方法:

- (void) updateTwoLabels:(NSString *)newText
{
    self.label1.text = newText;
    self.label2.text = newText;  // put breakpoint on this line
}
您希望在设置label2的文本之前在调试器中停止,并查看label1是否已更改。嗯,我认为没有办法做到这一点,除非修改代码,然后使用performSelector:withObject:afterDelay:再次调用自己,以便主运行循环可以运行一段时间,然后再次调用代码:

BOOL callAgain = NO;
BOOL setLabel2 = YES;
- (void) updateTwoLabels:(NSString *)newText
{
    self.label1.text = newText;
    if ( setLabel2 )
        self.label2.text = newText;  // put breakpoint on this line
    if ( callAgain )
        [self performSelector:@selector(updateTwoLabels:) withObject:newText afterDelay:0];
}

这样,在调试时,可以在gdbg中将callreath设置为YES,将label2设置为NO,并继续进行,直到看到label1已更改。这是基本技术。

在后台线程中完成整个方法,但在主线程上调用GUI。例如:[自执行self-performSelectorOnMainThread:@selectoraddSubview:withObject:seqView waitUntilDone:YES]。别忘了在方法开始时创建一个自动释放池,即在后台线程中运行的自动释放池,并在结束时将其耗尽。

thanx很多Bogatyr。我是编程新手。你能提供一些符合我要求的代码或示例代码吗。