0
我已經搜索了這個問題,唯一的提示是performSelectorOnMainThread解決方案。我這樣做了,但在for循環運行時視圖不會更新。循環後,進度值正確顯示 - 但這不是「進度」視圖的要點=)在for循環中更新UIProgressView
for循環位於控制器內。我調用一個方法來設置進度值:
CGFloat pr = 0.5; // this value is calculated
[self performSelectorOnMainThread:@selector(loadingProgress:) withObject:[NSNumber numberWithFloat:pr] waitUntilDone:NO];
這是加載進度方法
-(void)loadingProgress:(NSNumber *)nProgress{
NSLog(@"Set Progress to: %@", nProgress);
[[self progress] setProgress:[nProgress floatValue]];
}
我也試圖通過使用這把法for循環到後臺線程方法的頂部:
if([NSThread isMainThread]) {
[self performSelectorInBackground:@selector(importData) withObject:nil];
return;
}
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
也許有人可以幫助我這個。
這是正確的,讓在另一個線程運行循環,你似乎更新進度視圖的方式也似乎是正確的。兩個問題:首先,你的NSLog是否顯示設置了正確的值?其次,你確定沒有其他東西阻塞主線程嗎? – DarkDust 2011-05-25 09:53:43
在for循環完成後,NSLog消息被放出。值是正確的 - 但太遲了;) - 我不確定,其他東西是阻止主線程,但我可以說,我什麼也沒做,只是顯示視圖:) – cem 2011-05-25 09:57:59
滑稽:日誌消息顯示WHILE for循環正在運行,UIProgressView的更新是在for循環運行之後進行的。 – cem 2011-05-25 10:08:42