0

オンライン データベースから取得したデータのテーブルを表示する UIViewController があります。このデータのプルを処理し、テーブルが必要とするデータを提供するシングルトン マネージャーがあります。

これは、マネージャーがどのように機能するかの例です。

@property (nonatomic) NSArray *dataArray;
...
- (void)refreshDataSource
{
    [AClass fetchInBackgroundWithCompletionHandler:^(NSArray *objects) {
        self.dataArray = [NSArray arrayWithArray:objects];
    }
}
...
- (NSArray *)tableViewDataSource
{
    return self.dataArray;
}

ビュー コントローラーは呼び出しによって更新を要求します-refreshDataSource-viewDidLoad、その間に、-tableViewDataSource を指すことによって、その UITableView にマネージャーからのキャッシュ データを提供します。

ビュー コントローラが初めて表示されるときは、すべて問題ありません。2 回目に同じビュー コントローラーを提示しようとすると、アプリがハングします。ネットワーク要求も発火しません。

私が見つけた唯一の修正は、代わりに-refreshDataSource呼び出しを移動することです。-viewDidAppear:しかし、なぜこれが起こっているのかが気になり、ここで何かが間違っているに違いないことに不快感を覚えます。

誰かが助けや提案を提供できれば、それは素晴らしいことです!

4

1 に答える 1

0

あなたの質問はすべてを説明していませんが、ここにあなたを助けるかもしれないいくつかのアイデアがあります。

1)viewDidLoadは、ビューが最初にロードされたときにのみ呼び出されます。別のビューに切り替えてからtableViewに戻ると、refreshDataSourceは呼び出されません。

2)viewDidLoadは、配列が割り当てられて初期化される前に起動する可能性があるため、データを更新するときはnilですが、viewDidAppearには同じ問題がない可能性があります。

これ以上の情報がなければ、これ以上具体的な答えを出すことはできません。「1回目は大丈夫。2回目は…」ということをもっと明確に説明していただけますか?可能であれば、ステップバイステップで実行します。

于 2013-01-13T04:24:19.620 に答える