2

そのため、NSFRC を使用して UITableView を設定しています。以下cellForRowAtIndexPathを使用して、Core Data から各セルの情報をロードします。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myProto"];
[self configureCell:cell atIndexPath:indexPath];

configureCell次に、タグを使用してセルの 50% を埋めます。

MyEntity *myEntity = [self.fetchedResultsController objectAtIndexPath:indexPath];
UILabel *nameLabel = (UILabel *)[cell viewWithTag:1001];
nameLabel.text = myEntity.entityName;

これは、他のすべてのラベルと画像ビューについても続きます。このすべてが行われている間、ディクショナリにはサーバーからの情報が取り込まれます。この情報は、セルの残りの 50% を埋めるために使用されcellForRowAtIndexPathます。ではwillDisplayCell、Core Data に保存されている情報とインターネットからダウンロードした情報の両方に基づいて実行される計算に基づいて、テキストの色などのマイナーな要素に影響を与えるいくつかの計算を行います。また、willDisplayCellすべての情報がインターネットからダウンロードされているかどうかを確認します。ある場合は、フェッチした結果を循環し、Attribute呼び出されたものを変更しますsectionsSort以前に行われたのとまったく同じ計算に基づいています。つまり、読み込みが完了すると、TableView は特定のセルがどのセクションに入る必要があるかを計算します。次に、NSFRC は UITableView を並べ替えて、すべてを正しいセクションに配置します。

すべてがロードされた後にセクションを設定しているため、この手順が少し不安定であることは理解しています。私はすべてを適切に処理するために最善を尽くしました。たとえば、すべてが進行している間はユーザーからの対話を許可せず、すべてがインターネットからダウンロードされた後にのみセクション情報を設定します。ただし、NSFRC が互いの上に重複したセルを作成しているように見えるため、明らかに何かを説明していません。いくつかのセルには半透明の背景があり、重なり合うことで 2 倍に強くなるため、わかります。それらは、TableView のどこにいるかによって行き来するように見え、複数の不具合が発生します。私は明らかにどこかで NSFRC を間違って使用していますが、どこにあるのかわかりません。

この問題の診断にご協力いただければ幸いです。
よろしく、
マイク

更新:この潜在的な理由を見つけたばかりだと思います。viewDidAppearすべてのエンティティのセクションを設定します。エンティティ NSFRC を保存するたびに、画面上に行が再作成されるようです。これは正しい推論ですか?

更新 2それ以上の何かがあるようです。最後の 6 つのセルは、表示されていても、NSFRC によって認識されません。編集を押すと、最後の 6 つを除いて、すべてのアプリが右に移動します (そうあるべきです)。TableView がスクロールしていない場合でも、私の NSLog は何度も何度も繰り返されてwillDisplayCellいるようです。

更新 3わかりましたので、セクションを設定する私のコードは間違いなく問題です。すべてをコメントアウトするだけで、正常に機能します。各エンティティのセクションを設定する方法は次のとおりです。

for (id i in fetchedResultsController.fetchedObjects) {
    myEntity *myEntity = i;
    DownloadResult *downloadResult = [[DownloadResult alloc] init];
    downloadResult = [downloadResultsDictionary objectForKey:myEntity.entityName];

if (condition)
    {
        myEntity.sectionSort = @"2";

        NSError *error;
        if (![self.managedObjectContext save:&error]) {
            NSLog(@"Error: %@", error);
            FATAL_CORE_DATA_ERROR(error);
            return;
        }
    } 
else if (...

NSFRCをオーバードライブに送り、複数のグリッチを引き起こしているため、これを行う方法には明らかに何か問題があります.

4

1 に答える 1

3

修理済み。一日の終わりに愚かな間違い。TableView をリロードするのを忘れていました。

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
    [self.tableView endUpdates];
    [self.tableView reloadData];
}
于 2013-01-06T14:11:51.410 に答える