在视图之间传递核心数据实体变量

我无法理解如何在视图之间使用核心数据实体变量,为了更好地理解我的问题,我的代码如下:

查看A:

在某些时候我按下保存按钮时这样做:

- (void)guardarOrcamento { newBudget=[NSEntityDescription insertNewObjectForEntityForName:@"Budget" inManagedObjectContext:context]; newBudget.relationshipBetweenEntityBudgetAndClient = myEntityClientVariable; UIAlertView *saved = [[UIAlertView alloc]initWithTitle:@"Budget Saved" message:@"" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [saved show]; NSError *error; [context save:&error]) } 

查看B:

我的问题是在这个视图中,我需要连接另一个关系,为此,我的“newBudget”变量最不是空的!:

 - (void) setSelectedRowInTableview:(int)line { rowEntity=[NSEntityDescription insertNewObjectForEntityForName:@"rowEntity" inManagedObjectContext:context]; rowEntity.relationshipBetweenEntityRowEntityAndBudget = newBudget; .... 

这个RowEntity只有在预算实体已经存在的情况下才能存在…而且此时它确实存在!…在另一个视图中我插入了一个新对象并保存了它……我理解为什么变量“newBudget”(在视图B)是空的,但我怎么能坚持下去呢?

谢谢你的时间

基本上,您必须将全部预算实体或相关预算实体的ID从视图“A”传递到视图“B”。 不知道您的应用程序的视图层次结构和逻辑我假设您选择预算然后添加与该预算相关的实体。

独立于变量传递解决方案,您可以选择是将所选/插入的预算对象存储在NSManagedObject变量中,还是将预算对象的ID存储在NSManagedObjectID中,然后使用-(NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID error:(NSError **)error检索对象-(NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID error:(NSError **)error

1)使用全局变量

在AppDelegate中设置NSManagedObject / NSManagedObjectID,并使其可访问:

 NSManagedObject *selectedBudgetReference; // OR NSManagedObjectID *selectedBudgetReferenceID; ... @property (strong, nonatomic) NSManagedObject *selectedBudgetReference; @property (strong, nonatomic) NSManagedObjectID *selectedBudgetReferenceID; 

然后在视图A中存储到插入/选择的参考中:

 AppDelegate *app = (AppDelegate*) [[UIApplication sharedApplication] delegate]; app.selectedBudgetReference = newBudget; app.selectedBudgetReferenceID = [newBudget objectID]; 

最后在视图B中访问它:

 AppDelegate *app = (AppDelegate*) [[UIApplication sharedApplication] delegate]; NSManagedObject *localBudgetToRelate = app.selectedBudgetReference; NSManagedObject *localBudgetToRelate2 = [context existingObjectWithID:app.selectedBudgetReferenceID]; 

2)当用户从视图A切换到B时传递变量

与上面类似,但是你在表单B(formBViewController)中设置对象变量,当在表单A上创建表单B以切换到该视图时,您基本上访问表单B的新创建的视图控制器并将预算信息传递给formBViewController的对象变量。