我正在尝试在后台处理过程中显示UIActivityIndicatorView。
以下简化代码在我在模拟器中尝试时显示(显示警报)..但是当我从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];
}
答案 0 :(得分:1)
你有没有尝试清理你的构建?我只是在我的设备和模拟器上运行你的代码,它在两种情况下都按预期工作
答案 1 :(得分:1)
使用NSOperation代替原始线程操作。它为您抽象出各种各样的东西(优先级,autoreleasepools等......)。 ?您只需在NSOperation子类中添加某种委托即可在需要时进行回调。
答案 2 :(得分:0)
感谢您快速回复!
事实证明,问题根本不存在于此代码片段中。我正在执行此代码依赖于钥匙串中的值。虽然我的模拟器的钥匙串具有该值,但我的测试iphone没有这个值。
因为困扰你们所有人而感到非常愚蠢。但跟进nduplessis的回复帮助我缩小了问题的范围。