线程在模拟器中工作但在iPhone上不能工作

时间:2009-03-04 20:55:06

标签: iphone ios-simulator

我正在尝试在后台处理过程中显示UIActivityIndi​​catorView。 以下简化代码在我在模拟器中尝试时显示(显示警报)..但是当我从Xcode将其下载到我的手机时,后台线程似乎根本没有被调用。 (警报永远不会显示)
有任何想法吗?

 -(void)viewDidLoad {   
    [self performSelectorInBackground:@selector(runInAnotherThread) withObject:nil];

}

-(void) runInAnotherThread {
    NSAutoreleasePool *pool = [ [ NSAutoreleasePool alloc ] init ];
  int i;
    for(i=0;i < 1000 ;i ++){
        NSLog(@"INDEX = %d", i);
    }

    [self performSelectorOnMainThread : @ selector(backToMainThread ) withObject:nil waitUntilDone:NO]; 
    [ pool release ];
}

-(void) backToMainThread {

    UIAlertView *completeAlert = [[UIAlertView alloc] 
                     initWithTitle:@"Back to main "
                message: @"Success" 
                delegate:nil 
                cancelButtonTitle:@"OK" 
                otherButtonTitles:nil];
    [completeAlert show];
    [completeAlert release];    
}

3 个答案:

答案 0 :(得分:1)

你有没有尝试清理你的构建?我只是在我的设备和模拟器上运行你的代码,它在两种情况下都按预期工作

答案 1 :(得分:1)

使用NSOperation代替原始线程操作。它为您抽象出各种各样的东西(优先级,autoreleasepools等......)。 ?您只需在NSOperation子类中添加某种委托即可在需要时进行回调。

答案 2 :(得分:0)

感谢您快速回复!

事实证明,问题根本不存在于此代码片段中。我正在执行此代码依赖于钥匙串中的值。虽然我的模拟器的钥匙串具有该值,但我的测试iphone没有这个值。

因为困扰你们所有人而感到非常愚蠢。但跟进nduplessis的回复帮助我缩小了问题的范围。