UIProgressView未在iPhone上显示,但在模拟器中显示

UIProgressView未在iPhone上显示,但在模拟器中显示,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我有一个名为progTimer的UIProgressView,我通过Interface Builder将它放在视图控制器上。在iOS模拟器上,UIProgressView显示得很好,但当我在iPhone上测试它时,它没有出现 下面是修改它的代码 - (IBAction)scanbtn { [progTimer invalidate];//cancels timer if currently running progTimer=nil; progNum = 0; p

我有一个名为
progTimer
UIProgressView
,我通过Interface Builder将它放在视图控制器上。在iOS模拟器上,
UIProgressView
显示得很好,但当我在iPhone上测试它时,它没有出现

下面是修改它的代码

- (IBAction)scanbtn
{
    [progTimer invalidate];//cancels timer if currently running
    progTimer=nil;
    progNum = 0;
    progTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 //timer to update the progress view
                                               target:self 
                                             selector:@selector(progIncrease)
                                             userInfo:nil
                                              repeats:YES];
    [self scan];
}
-(void) progIncrease
{
    progNum = progNum + 0.01;
    scanProg.progress = progNum;
    if (progNum >=1)
    {
        [progTimer invalidate];
        progTimer=nil;
        //[alert show];
    }
}

有什么想法吗?提前谢谢

我的猜测是,在设备上,扫描过程进展如此之快,以至于你根本看不到它。要确保它在ProgressIncrease方法中工作,请使用ad和NSLog查看它的扫描速度。我的预加载通知程序也有同样的问题,它们显示在模拟器上,但没有显示在设备上

您调用[自扫描];这似乎是罪魁祸首。扫描操作要运行多长时间

需要注意的是,当任何长时间运行的操作在主线程(即UI线程)中运行时,主线程循环中的任何其他代码都不会被执行(直到长时间运行的操作完成),这意味着您的计时器功能,甚至在按下按钮后按下按钮都无法工作。您需要使用NSOperation和dispatch queue,或者创建一个线程并在后台运行扫描操作,并使用NSMachPort或NSObject performSelectr:OnThread:…向主线程发送通知。。。等,以更新进度条


顺便说一下,扫描过程和进度条没有任何关系;理想情况下,进度条应该更新扫描完成的数量,这意味着如果扫描在次线程中运行,则扫描进程必须通知进度条更新主线程中的扫描量。

所有:出于某种原因,我将进度视图的样式更改为“bar”,它显示得很好。不知道是什么导致了最初的问题,但现在它工作了,尽管有一个不同的样式栏

[自扫描]是一种非常快速的方法(目前),只需弹出一个AlertView。但同样,这在模拟器中运行良好,而不是在设备上/事实上,当视图加载时,它甚至不显示空的进度条。。。