iOS核心数据 - 添加到一对多关系集的对象无法正常工作

时间:2014-05-08 02:26:04

标签: ios core-data nsmutablearray one-to-many relationship

我的Core Data托管对象上下文中有一个名为Event的实体类型,它与另一个名为Activity的实体有一对多的关系。也就是说,每个事件都可以有很多活动。

在我的应用的AddNewEvent方法中,我执行以下操作:

// create the first default itinerary activity object (Ceremony)
NSManagedObject *newActivity = [NSEntityDescription insertNewObjectForEntityForName:@"Activity" inManagedObjectContext:context];
[newActivity setValue:@"Ceremony" forKey:@"activityName"];
[newActivity setValue:[NSDate date] forKey:@"activityDate"];
[newActivity setValue:@"" forKey:@"activityNotes"];
[newActivity setValue:@NO forKey:@"complete"];
[newActivity setValue:@NO forKey:@"hidden"];
[newActivity setValue:@"" forKey:@"venueAddress"];
[newActivity setValue:@"" forKey:@"venueBusinessPhone"];
[newActivity setValue:@"" forKey:@"venueContact"];
[newActivity setValue:@"" forKey:@"venueEmail"];
[newActivity setValue:@"" forKey:@"venueName"];
[newActivity setValue:@"" forKey:@"venueWebsite"];

NSLog(@"new activity name: %@", [newActivity valueForKey:@"activityName"]); // test 1

NSMutableSet *newActivitiesSet;
[newActivitiesSet addObject:newActivity];

NSMutableArray *newActivitiesArray = [[newActivitiesSet allObjects] mutableCopy];
NSLog(@"new activity name in set: %@", [[newActivitiesArray objectAtIndex:0] valueForKey:@"activityName"]); // test 2

// finally, add activities to the Event object
[newEvent setValue:newActivitiesSet forKey:@"activities"];

也许我没有正确处理set / array,但是当我在注释的行中记录Activity的名称" test 1"它打印"仪式"正确。但是,当我在评论的行中记录它时,测试2"它打印"(null)"。看起来Activity对象没有被添加到集合中,或者集合没有被正确地复制到数组中,或者可能是我没想到的。

我是否使用set,array正确处理整个过程,并将该集添加到Event对象的Activities活动关系中? (我意识到我的两条测试线在我将数据保存到上下文之前就已经出现了,但这对于我在这里运行的两个测试来说并不重要。)

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要实例化该集。

NSMutableSet *newActivitiesSet = [[NSMutableSet alloc]init];

编辑:另外,我尽量避免使用" new"这个词。为什么不把它称为活动和活动集