核心数据迅速的关系

时间:2016-02-24 15:43:28

标签: ios iphone swift core-data

我正在开发iPhone应用程序,我需要实现从一个实体到另一个实体的一对多关系。我从coredata数据库中导出result + 1子类但在核心数据模型文件中找不到像Objective的关系访问器-C。

虽然我能够在关系NSManagedObject中设置数据,但这仅在iPhone应用程序运行时持续存在。一旦我杀死并重新启动应用程序,我就没有从核心数据中获取实体关系。

我不确定我做错了什么。如果有人能告诉我如何在NSSet关系对象中设置数据,那将会很棒。任何示例都将是一个很好的帮助

这是我的核心数据模型文件。一个文件夹可以将多个内容作为文件夹详细信息

NSSet

2 个答案:

答案 0 :(得分:2)

如果FolderContent和FolderList的关系定义为

  • FolderContent有许多FolderList(s)
  • FolderList仅属于FolderContent

<强> FolderContent

enter image description here

extension FolderContent {
    @NSManaged var contentID: NSNumber?
    @NSManaged var contentTitle: String?
    @NSManaged var contentType: String?
    @NSManaged var publishDate: String?
    @NSManaged var folderList: Set<FolderList>?
}

<强> FolderList

enter image description here

extension FolderList {
    @NSManaged var folderID: NSNumber?
    @NSManaged var folderName: String?
    @NSManaged var folderDetail: FolderContent?
}

假设您想要保留记录及其关系

func persistRecords() {

    // Insert the new records
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext

    let folderContentEntity = NSEntityDescription.entityForName("FolderContent", inManagedObjectContext: managedContext)
    let folderListEntity = NSEntityDescription.entityForName("FolderList", inManagedObjectContext: managedContext)

    //Create FolderContent record
    let folderContentObject = FolderContent(entity: folderContentEntity!, insertIntoManagedObjectContext: managedContext)
    folderContentObject.setValue(CONTENTID, forKeyPath: "contentID")
    ...

    //Create FolderList record
    let folderListObject = FolderList(entity: folderListEntity!, insertIntoManagedObjectContext: managedContext)
    folderListObject.setValue(FOLDERID, forKeyPath: "folderID")
    ...

    //Set relationship here
    folderListObject.folderDetail = folderContentObject

    do {
      try managedContext.save()
    } catch let error as NSError  {
      print("Could not save \(error), \(error.userInfo)")
    }
  }

答案 1 :(得分:0)

我猜你做了folder.folderDetail.addObject之类的事情。核心数据不会起作用,因为幕后的核心数据正在做很多事情来维护图形完整性。您必须使用mutableSetValueForKey来获取集合并让核心数据发挥其神奇作用。