【问题标题】:Core Data with Swift two entitiesCore Data 与 Swift 两个实体
【发布时间】:2015-04-16 12:39:23
【问题描述】:

我正在尝试使用 Core Data 来保存我的一些应用程序数据。我有以下课程。基本上我想存储每个作业的属性,并在以后使用它。

以下是我目前在我的应用程序中使用的类。

class Job {
    var name:String?
    var count = 1
    var id:String
    var startDate:NSDate?
    var finishDate:NSDate?
    var expected:NSDate?
    var detail:Array<JobDetail> = []
    var isFinished:Bool?
    var sender:String?
    var receiver:String?

    init(name:String?, id:String) {
        self.name = name
        self.id = id
        self.isFinished = false
        self.startDate = NSDate()
    }

    func addDetail (message:String?, date:NSDate?, location:String?, status: DetailStatus) {
        detail.append(JobDetail(message: message, date: date, location: location, status: status))
        if status == DetailStatus.OK {
            self.isFinished = true
            self.finishDate = date
        }
    }

}


enum DetailStatus {
    case OK
    case Error
    case Exception
    case Unknown
}


class JobDetail {
    var message:String?
    var date:NSDate?
    var location:String?
    var status:DetailStatus

    init(message:String?, date:NSDate?, location:String?, status: DetailStatus) {
        self.message = message
        self.date = date
        self.location = location
        self.status = status
    }
}

我在创建数据模型后使用 Xcode 创建的 NSManagedObject 子类。

class Job: NSManagedObject {

    @NSManaged var name: String
    @NSManaged var count: NSNumber
    @NSManaged var id: String
    @NSManaged var startDate: NSDate
    @NSManaged var finishDate: NSDate
    @NSManaged var expected: NSDate
    @NSManaged var isFinished: NSNumber
    @NSManaged var sender: String
    @NSManaged var receiver: String
    @NSManaged var details: NSSet

}

class JobDetail: NSManagedObject {

    @NSManaged var message: String
    @NSManaged var date: NSDate
    @NSManaged var location: String
    @NSManaged var status: NSNumber
    @NSManaged var parent: Job

}

这是我的数据模型的截图。

基本上我想在我的应用程序中对作业进行 CRUD,以便我可以在我的表格视图中显示它们。我已经设置好了所有东西,但是因为我无法设置 Core Data,所以我没有持久性。如果您能帮助我设置 Core Data,我将不胜感激。

【问题讨论】:

  • 同意Keyur,你需要做一个基础教程。了解如何创建和保存对象。
  • 我可以创建和保存单个实体。但正如您从我的示例中看到的那样,我有两个实体。 AFAIK 这是模拟数组的唯一方法。链接的教程仅讨论单个实体。同样对于我的示例订单或工作细节很重要。

标签: ios swift core-data


【解决方案1】:

【讨论】:

    【解决方案2】:

    从屏幕截图看来,您的设置是正确的。将详细信息与此类工作联系起来。

    detail1.parent = job
    detail2.parent = job 
    context.save(nil)
    

    获取此类工作的所有详细信息

    job.details
    

    这是无序的,但您可以使用 sortedArrayUsingDescriptors 对其进行排序。

    let sortedDetails = job.details.sortedArrayUsingDescriptors(
      [NSSortDescriptor(key:"date" ascending: false)])
    

    【讨论】:

    • 感谢您的回复。我有一个小问题,因为有时日期是相同的,有没有办法根据他们添加的顺序对它们进行排序,或者我应该使用一些索引变量并设置它?此外,您编写的代码暗示我应该将详细信息放入数组中。我正在尝试单独使用 Core Data 在 tableview 中使用。基本上,我想使用 addDetail 函数向 Core Data 添加详细信息,并获取包含详细信息的作业名称以填充 tableView。如果你能给我写一个简单的样板代码或指导我一个例子,我将不胜感激。再次感谢。
    • 对不起,这个平台不是用来获取样板代码的。你必须自己写。我提供的代码解决了您最初提出的问题。如果您对此感到困扰,我建议使用专门为在表格视图中显示核心数据对象而构建的NSFetchedResultsController(查阅文档)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多