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

时间:2013-07-30 23:00:55

标签: ios core-data

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

查看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中)是空的,但我怎么能坚持下去?

谢谢你的时间

1 个答案:

答案 0 :(得分:1)

基本上,您必须将完整预算实体或相关预算实体的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的对象变量