我在将核心数据用于我的应用程序时遇到了很多困难。我非常熟悉表视图控制器中的核心数据,甚至在单个视图应用程序中使用核心数据。但是,我无法让我的程序在多个视图控制器中正常运行。
我已经阅读了Zarra的核心数据手册,并购买了iOS的专业核心数据并完成了列出的项目,但每一项都在TableView控制器中使用。除了iOS专业核心数据中的形状应用程序。
是否有人知道如何使用多个视图控制器和核心数据来演示程序的任何示例(代码或教程)?
我想要做的是在第一个(而不是tableview单元格)上有按钮,它们将转到下一个viewController。在第二个视图控制器上,我希望用第一个实体的集合中的信息填充该信息,
所以到目前为止,第一个实体是:
众议院
人
占用者< - >>家庭(一对多)
{
...
int i = //house selected on previous view controller;
NSManagedObject *people = [[self sortOccupants] objectAtIndex:i];
textField01.text = [NSString stringWithFormat:@"%@",[[people valueForKey:@"personName"]description]];
}
排序占用者看起来像这样:
-(NSArray *)sortOccupants
{
NSSortDescriptor *sortPeopleInHouse = [[NSSortDescriptor alloc] initWithKey:@"personName" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortPeopleInHouse, nil];
return [[(NSSet *)[house valueForKey:@"occupants"] allObjects] sortedArrayUsingDescriptors:sortDescriptors];
}
任何想法都会很棒但是如果你能指出我会表现出来的示例代码,我会非常感激。
谢谢,
答案 0 :(得分:1)
关键是每个视图控制器都应该有
@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;
在标题中。
在推送视图控制器之前,您需要为其提供一个托管对象上下文。在这个新的视图控制器中,您可以使用典型的方法来搜索和保存上下文。
你从一个家庭视图控制器开始,它实际上是一个人的列表。您选择一个人并启动人员视图控制器。您应该将托管对象上下文和Person实例传递给此人员视图控制器。
答案 1 :(得分:1)
我接近这个的方法是为你的实体生成NSManagedObject子类(使它更具可读性和类型安全性)。
然后,我将在第二个视图控制器中创建一个新的init方法。 initWithHouse :( House *)房子或其他东西:
@property (nonatomic, strong) House * currentHouse;
@property (nonatomic, strong) NSArray * sortedOccupants; // Array of People objects
-(id) initWithHouse:(House *)house
{
if (self = [super init])
{
// Managed Object Context available from [currentHouse managedObjectContext]
currentHouse = house;
sortedOccupants = [self sortOccupants:house.occupants];
}
return self;
}
-(NSArray *)sortOccupants: (NSSet *)occupants
{
NSSortDescriptor *sortPeopleInHouse = [[NSSortDescriptor alloc] initWithKey:@"personName" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortPeopleInHouse, nil];
return [occupants allObjects] sortedArrayUsingDescriptors:sortDescriptors];
}
希望有所帮助。