目標是「在啓動viewWillAppear時啓動spinner圖形,在顯示tableview之前加載數據」,所以用戶不會疑惑爲什麼在查看錶格之前會有延遲。即一個UIActivityIndicatorView已被添加到窗口中,我只是想設置alpha來隱藏/顯示它。崩潰 - 「Collection <CALayerArray:0x645dfc0>在枚舉時發生了變化。」
我啓動一個線程時,確保「旋轉齒輪」 ImageView的(標記= 333)被所示,移動到中加載/ viewWillAppear中計算的東西之前得到這個奇怪的錯誤。
我不明白這一點在每次調用[appdel addGearz]和[appdel removeGearz],它發生了這兩個,這是隨機的。它可能發生在2個viewWillAppears之後,或15個之後。如果我註釋掉設置alpha的那一行,那麼所有東西都可以工作。
一個典型的viewWillAppear中看起來像這樣,
[super viewWillappear];
[email protected]"Products listing"; //and other simple things
[appdel addGearz];
[self getProducts];
[self getThumbnails];
[myTableView reloadData]; //in case view already loaded and coming back from subview and data changed
這裏是崩潰,如果與阿爾法行沒有被註釋掉
-(void)addGearz {
[NSThread detachNewThreadSelector:@selector(gearzOn) toTarget:self withObject:nil];
}
-(void)removeGearz {
[NSThread detachNewThreadSelector:@selector(gearzOff) toTarget:self withObject:nil];
}
- (void)gearzOn {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[window viewWithTag:333].alpha=1.0;
//
// [[window viewWithTag:333] setNeedsDisplay];
[pool drain];
}
- (void) gearzOff {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[window viewWithTag:333].alpha=0.0;
//
// [[window viewWithTag:333] setNeedsDisplay];
[pool drain];
}
我用別人的代碼的代碼,所以......任何明顯的你可以看到?當然,我必須能夠改變線程中的UIViews的alpha?我是否需要在某些「停止枚舉而我更改此代碼」中「嵌入」alpha-change?
我做到了不通過移動字母更改線上面的池頁頭或低於[池排水]崩潰,但後來我得到了很多的「有沒有到位池自動釋放 - 只是跑冒滴漏」 -messages 。
顯然,我不明白這個線程代碼。
[自performSelectorOnMainThread:@selector(gearzOn)withObject:無waitUntilDone:YES];不會立即更新可見性,這是整個想法 - 因爲viewWillAppear將在推送視圖之前完成所有加載操作,所以用戶應該知道發生了什麼。 – 2011-01-21 12:20:11