ios - 初学者核心数据和关系

标签 ios core-data

非常努力地了解核心数据和关系。我当前的实体设置是这样的:

个人资料<-->>事件

我一切正常(我现在可以添加、更改和删除配置文件和事件,我只是没有关系连接)。所以基于此,我应该只需要让关系“连接”一次,对吧?当我添加一个事件时,它只需要知道与哪个配置文件关联,然后任何更改、删除等都将由核心数据处理?

如果我在正确的轨道上,我应该在添加事件时在哪里实现配置文件更新?

我正在根据 TableView Controller 的委托(delegate)保存事件...

FROM THE ADD EVENT VIEW CONTROLLER


AddEventViewController.m

[self.currentEvent setEventdesc:eventDescField.text]
[self.delegate addEventViewControllerDidSave];



FROM THE EVENT TABLE VIEW CONTROLLER

EventTableViewController.m

-(void) addEventViewControllerDidSave {
  NSError *error = nil;
  NSManagedObjectContext *context = self.managedObjectContext;

    if (![context save:&error]) {
      NSLog(@"Error %@", error);
    }

   [self dismissViewControllerAnimated:YES completion: NIL];
}

最佳答案

首先,我猜你在核心数据中没有关系。 然后,您需要添加它们之间的关系:

  1. 在配置文件中与目标事件创建一个名为 eventRelation 的关系
  2. 对具有目标配置文件的配置文件 (profileRelation) 执行相同操作,并设置其倒数。其倒数是另一个实体中的属性名称,在本例中,Profile 中的 eventRelation 的倒数是 profileRelation。

现在您需要更新模型的文件,并向其中添加这些属性。例如 在Profiles.m中添加: @property(非原子,保留)事件 * eventRelation。

最后,在代码中,当您想要保存事件关系时,您需要执行以下操作:

Profile * newProfile = (Profiles *)[NSEntityDescription insertNewObjectForEntityForName:@"Profile" inManagedObjectContext:self.managedObjectContext];

Events * addEvent = (Events *)[NSEntityDescription insertNewObjectForEntityForName:@"Events" inManagedObjectContext:self.managedObjectContext];

//Set event and profile data

newProfile.eventRelation = addEvent;

//And save changes  
[self.managedObjectContext save:&error];

现在,每次获取实体时,您都可以使用以下方法访问另一个对象:

//fetch data into self.profiles
profiles.eventRelation

更新了示例:

假设您的实体配置文件具有以下属性:名称、姓氏和关系 eventRelation,以及具有属性名称、日期和关系 profileRelation 的事件实体。 然后,如果您想在事件中添加日期,您可以获取所需的事件并执行以下操作: 事件*事件...获取它; event.date = [NSDate ...]

另一个选项是:您已获取个人资料,并且想要更改个人资料名称和一个事件的日期(您在该个人资料中已经有一个事件),您可以:

Profile * profile ... fetch it
profile.name = @"asd"
profile.eventRelation.date = [NSDate ...];

之后,您只需保存它即可。

关于ios - 初学者核心数据和关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19385273/

相关文章:

ios - 核心数据 : annotation: Failed to load optimized model at path with Xcode 9 GM

objective-c - 制作不受管理的 NSManagedObject 的副本

android - $cordovaFile checkFile() 查看 www 文件夹中的文件是否存在?

objective-c - UIView setNeedsDisplay 调用CALayer 的setNeedsDisplay?

ios - Alamofire异步通话

ios - 键盘出现时如何调整ScrollView的大小?

ios - 如何用Core Data设计对象的 "ordering"

cocoa - 在核心数据中,一个MOC中是否只有一个托管对象?

ios - 让 RestKit 留下特定的孤儿 CoreData 托管对象

ios - 链接器命令失败,tipsi-twitter 中出现错误代码 1