1

在将 Person NSManagedObject 传递到下一个视图之前,我需要重新加载它。

这是因为我使用的 fetchedResultsController 只返回属性的一个子集,我需要在下一个视图中使用完整集。

到目前为止,我正在尝试类似:

- (void)tableView:(UITableView *)tableViewPassed didSelectRowAtIndexPath:(NSIndexPath *)indexPath {        
        Person *partialPerson = (Person *)[self.fetchedResultsController objectAtIndexPath:indexPath];

   NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:[partialPerson.managedObjectContext]];

    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
    [request setEntity:entity];
...

现在,到目前为止,我似乎无法让谓词正常工作:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF == %@", partialPerson];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF == %@", partialPerson.objectID];

但这些似乎都不起作用。我在这里做错了什么?这是一个好方法吗?

提前感谢您的任何建议,马特

4

2 回答 2

1

您只需要访问未出错的属性,它们就会自动出错。您根本不需要重新获取对象。

更新

在 Core Data 中存储图像或任何二进制数据需要遵循一些基本规则:

< 100kb store it in the same entity
< 1 mb store it in a separate entity on the other end of a relationship
> 1 mb store it on disk and reference it in the same entity

听起来您在主表中存储了太多的二进制数据。要更正此问题,请遵循上述规则,它将解决您的问题。

但这并不能否定我原来的答案,因为您可以指示您的 fetch 提取属性 1、属性 3 和属性 5,当您需要访问属性 3 时,您只需访问它,Core Data 将“做正确的事情”并在何时加载它您尝试访问它。在这种情况下,永远没有理由“重新加载”对象。

于 2010-02-11T23:27:42.090 回答
0

为什么需要重新获取 partialPerson?

只需将它传递给下一个视图,您就完成了!!!您可以在下一个视图中使用 partialPerson 变量做所有您想做的事情。我看不出您需要重新获取它的任何理由。

myViewController.myPartialPerson = partialPerson;
于 2010-02-12T11:39:47.720 回答