3

iOS6 アプリでは、CoreData を使用して DB から NSManagedObjects をフェッチし、それらを tableViewCell に表示します。私の問題は、最初のスクロール位置の外側のセルに対応するすべてのオブジェクトが障害状態にあり、元に戻らないことです。私は自分の間違いを見ることができません。

fetchRequest.returnsObjectsAsFaults = NO; 役に立ちますが、クリーンなソリューションが必要です。

コードは次のとおりです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"ContactsCell";
    ContactsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    Contact *contact = [self.contacts objectAtIndex:indexPath.row];

    //here some contacts are faulted. contact.name is null if I fetch it

    [cell setContactData:contact];

    return cell;
}

これが私が取得する方法です(Restkit 0.10.3を使用):

 NSFetchRequest *fetchRequest = [Contact fetchRequest];
    fetchRequest.sortDescriptors = [self sortDescriptors];
    fetchRequest.returnsObjectsAsFaults = NO;
    return [Contact objectsWithFetchRequest:fetchRequest];
4

1 に答える 1

0

わかりました私はあなたのアプローチを実際に使用したことがないので、それが間違っているとは言いませんが、奇妙だと言います. Contact は NSManagedObject のサブクラスであり、彼が最初にフェッチされたフェッチ要求を認識し、フェッチされたコンテキストを知っていると信じることができますが、それは彼が既にフェッチされた後でのみです。彼が永続的なストアから取り出されたことがない場合、彼がどのようにしてそれらのことを知ることができたのか、私には本当にわかりません。したがって、従来の executeFetch または fetchedResultsController を使用して tableView を設定することをお勧めします。

NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init]; 
[context setPersistentStoreCoordinator:persistentStoreCoordinator];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:context];
fetchRequest.entity = entity;
fetchRequest.sortDescriptors = [self sortDescriptors];
NSArray *array = [context executeFetchRequest:fetchRequest error:&error];
return array;

試してみてください、それが役立つことを願っています

于 2013-11-28T13:38:53.003 に答える