Ios 一对多关系:无法保存
我试图用我掌握的一些数据建立一对多的关系 我有一个Ios 一对多关系:无法保存,ios,objective-c,core-data,nsarray,nsdictionary,Ios,Objective C,Core Data,Nsarray,Nsdictionary,我试图用我掌握的一些数据建立一对多的关系 我有一个项目和许多项目,我正试图设置控制器来保存它们,但这是我第一次使用一对多关系,我的脑袋快要爆炸了 这就是我的保存方法 - (void)writeProj:(NSArray *)recivedProData ItemsData:(NSArray *)itemsData { // WRITE TO CORE DATA NSManagedObjectContext *context = [self managedObjectContex
项目和许多项目,我正试图设置控制器来保存它们,但这是我第一次使用一对多关系,我的脑袋快要爆炸了
这就是我的保存方法
- (void)writeProj:(NSArray *)recivedProData ItemsData:(NSArray *)itemsData {
// WRITE TO CORE DATA
NSManagedObjectContext *context = [self managedObjectContext];
for (NSDictionary *dict in recivedProData) {
Project *project = [NSEntityDescription insertNewObjectForEntityForName:@"Project" inManagedObjectContext:self.managedObjectContext];
project.projectNumber = [dict valueForKey:@"ProjectNumber"];
project.projectDescription = [dict valueForKey:@"Description"];
// project.items = [dict valueForKey:@""]; // this is the relationship for project
}
for (NSDictionary *dict in itemsData) {
Items *items = [NSEntityDescription insertNewObjectForEntityForName:@"Items" inManagedObjectContext:self.managedObjectContext];
items.description = [dict valueForKey:@"Description"];
items.area = [dict valueForKey:@"Area"];
items.stage = [dict valueForKey:@"Stage"];
// items.project = [dict valueForKey:@""]; // this is the relationship for items
}
NSError *error = nil;
if (![__managedObjectContext save:&error]) {
NSLog(@"There was an error! %@", error);
}
else {
NSLog(@"created");
}
[Project addItemsObject:items];
[__managedObjectContext saveOnSuccess:^{
NSLog(@"You created a relationship");
} onFailure:^(NSError *error) {
NSLog(@"There was an error! %@", error);
}];
}
因此,我有一个项目
和许多项目
,我只是不知道如何设置关键字段,以便它们作为一个项目和许多项目保存到核心数据中
所以希望我的代码是有意义的。如果有人能帮我找出如何正确保存它,我将不胜感激。只需将items.project设置为与您刚才创建的项目相同即可
items.project = project;
编辑:如果您只有一个项目,那么应该将project*project
声明移到recivedProData
for循环之外——您为每个字典创建一个项目,并且您说您只有一个项目。如果您只有一个项目,那么整个代码块就毫无意义了——为什么您有一个project
数据数组,而不仅仅是一个字典?我想讨论一下您的核心数据模型,即您使用核心数据GUI编辑器配置的模型。我对以下代码行中名为“Items”的多个实体感到好奇:
Items *items = [NSEntityDescription insertNewObjectForEntityForName:@"Items" inManagedObjectContext:self.managedObjectContext];
也许这只是一个语义问题。然而,多个实体名称可能表明核心数据模型中存在问题。我会尽力解释,但这是相当抽象的东西
尽管一个实体可能有一种表示事物集合的关系,但该实体本身并不是真正的事物集合;实体在模型中始终是一个单独的东西,在代码中(以及在命名方案中)应该这样对待
以下是我如何用文字描述您的模型:
项目实体是一个具有称为items的关系的单一对象。项目关系是项目实体的集合(一组)(即一对多关系)。但每个项目实体都是一个单独的东西
GUI编辑器中的模型是否反映了此描述 好的。然后将保存添加到循环的项中。。这一切都合乎逻辑。。希望它能工作我不认为你需要将saveOnSuccess:call放入for循环——将其保存到硬盘上几次是没有效率的,而不是像现在这样保存到硬盘上一次(核心数据会将更改保存在内存中,直到你关闭应用程序或放弃它们),请记住,iOS设备上的闪存在耗尽之前只能进行一定量的写入。还是我完全误解了你写的东西?对不起,我不是太清楚我说的是这行代码[project addItemsObject:items];不是拯救。。save仍在循环之外。。因此,如果我正在使用您的项,我甚至需要此代码。project=project;?哪种代码?saveOnSuccess:?如果你想让数据在用户关闭应用程序后保持不变,你需要保留它。你知道如何将项目和相关项目读取到数组中吗?我想这就解释了我在做什么。我有一个项目,其中有很多项目。。items是项的集合。这有意义吗?这就是我试图实现的,我非常确定我的数据模型是正确的,因为我从项目到项目有一对多的关系。。然而,我不确定我的代码是否反映了这一点,因为我以前从未尝试过类似的事情,我依赖于我在编写和读取单一对象方面的经验。你能从GUI编辑器中截取你的数据模型并发布它吗?正如其他人所说,您发布的代码存在一些问题,但首先让我们确定您的模型是正确的。