我需要重新加载一个Person NSManagedObject,然后再将它传递给下一个View。
这是因为我正在使用的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];
但这些似乎都不起作用。我在这做错了什么?这是一个好方法吗?
提前感谢任何建议, 马特
答案 0 :(得分: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引入attribute1,attribute3和属性5,当你需要来访问attribute3时,你只需访问它并且Core Data将会“做正确的事”并在您尝试访问它时加载它。在这种情况下,没有理由“重新加载”对象。
答案 1 :(得分:0)
为什么需要重新获取partialPerson?
只需将其传递到下一个视图就可以了!您可以在下一个视图上使用partialPerson变量执行所有操作。我没有看到你需要重新获取它的任何理由。
myViewController.myPartialPerson = partialPerson;