目標は「テーブルビューを表示する前にデータを読み込むviewWillAppearの開始時にスピナーグラフィックを起動する」ため、ユーザーはテーブルを見る前に遅延がなぜあるのか不思議ではありません。私。 UIActivityIndicatorViewがウインドウに追加されました。私は、アルファを非表示にするか設定したいだけです。クラッシュ - "Collection <CALayerArray:0x645dfc0>が列挙されている間に突然変異しました。"
スレッドを開始して「回転歯車」画像ビュー(tag = 333)が表示されるようになると、この奇妙なエラーが発生してから、viewWillAppearの読み込み/
[appdel addGearz]と[appdel removeGearz]が呼び出されるたびに取得することはありませんが、これらは両方とも発生し、ランダムです。 2つのviewWillAppearsの後、または15の後に起こります。アルファを設定する行をコメントアウトすると、すべてが機能します。典型的な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];
}
をコメントアウトされていない、私は他の誰かのコードを使用した場合にクラッシュするコードです。なので...あなたが見ることができる明白な何か?確かに私はスレッド内のUIViewのアルファを変更できる必要がありますか?アルファチェンジを「変更している間に列挙を停止する」コードに「埋め込む」必要がありますか?
私は、そのアルファチェンジラインをプールのallocより上に移動するか、[pool drain]よりも下に移動することでクラッシュしないようにしましたが、 "プールがない状態でオートレリースされました。 。
明らかに、このスレッドコードについてはわかりません。
[self performSelectorOnMainThread:@セレクタ(gearzOn)withObject:なしwaitUntilDone:はい];ビュー全体が読み込まれる前にviewWillAppearがすべての読み込みを行うため、ユーザーは何かが起こっていることを認識する必要があります。 –
[window setNeedsDisplay]で表示されませんでした。どちらか。しかし、アルファ版のUIAnimationを使っていました。 (クイックフェード。)それはなぜ作品が、アルファを設定し、ウィンドウを更新するように頼んでいない任意のアイデア?あなたの答えが正しいとマークし、問題を解決しました。ありがとう! –
私はレイヤの表示キューとアニメーションを扱う方法との関係があると思います。 UIAnimationがやったことを知ってよかったです。 –