在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];
答案 0 :(得分:0)
好的,我从来没有真正使用过你的方法所以我不会说这是错的,但我会说这很奇怪。我猜联系人是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;
尝试一下,希望有所帮助