我很难理解如何在视图之间使用核心数据实体变量,为了更好地理解我的问题,我的代码如下:
视图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
检索对象。
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的对象变量。