【问题标题】:Core Data not saving the relationship核心数据不保存关系
【发布时间】:2015-08-16 12:45:42
【问题描述】:

您好,我的核心数据有另一个问题,我正在尝试保存一个名为 Date 的实体,该实体具有一个关系 - 一个与另一个名为 Folder 的实体的关系。

以下是我如何保存实体日期的代码:

if(occasion == nil){
    occasion = NSEntityDescription.insertNewObjectForEntityForName("Date", inManagedObjectContext: handler.context!) as? Date
}

formatter.dateStyle = NSDateFormatterStyle.ShortStyle

occasion?.title = textFieldTitle.text
occasion?.date = formatter.dateFromString(textfieldDate.text)!
occasion?.occasion = textfieldOccasion.text
occasion?.notify = switchNotifyMe.on
occasion?.folder = folder!

handler.context?.save(&error)

当我调试时,我看到的是:

但是当我执行以下代码列出属于特定文件夹的所有日期时,我得到 1;这是获取与特定文件夹相关的所有日期的代码:

var error: NSError?
var name: String = (folder?.name)!

var filter = NSPredicate(format: " folder.name = %@",name)
var handler: HACoreDataHandler = HACoreDataHandler()
var request = NSFetchRequest(entityName: "Date")

request.predicate = filter
dates = handler.context?.executeFetchRequest(request, error: &error) as! [Date]

如果我删除 NSPredicate,我会得到所有日期,这是因为属性文件夹 = nil。

知道我做错了什么吗?

提前感谢您的帮助。

【问题讨论】:

    标签: swift core-data


    【解决方案1】:

    如果每个Folder可以有多个Dates,则需要将dates关系设置为“to many”。

    当你设置Date对象的folder属性时,CoreData设置了对应的逆关系,即。设置Folder 对象的dates 属性。因为您已将其定义为“to one”,CoreData 必须删除该文件夹的所有现有 Date。因此,现有 Datefolder 属性设置为 nil(这是您的 fetch 显示的内容)。

    如果您将关系重新定义为“to many”,CoreData 将为 dates 属性使用 NSSet,因此它可以跟踪同一 Folder 的多个不同 Dates

    【讨论】:

    • 您好,非常感谢,我以为我是这样做的,但是当我回到文件夹实体中的模型时,我发现关系也是一对一的。
    猜你喜欢
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多