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