user4170419
user4170419

Reputation:

Core Data with Swift two entities

I am trying to use Core Data to save some of my application data. I have following classes. Basically I want to store the properties of each job, and use it later on.

Following is the class I currently use in my application.

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
    }
}

NSManagedObject sub class I created with Xcode after I create the data model.

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

}

Here are the screenshots of my data model.

Job Job Detail Basically I want to CRUD Job in my application so that I can show them in my tableview. I have everything setup, but because I couldn’t setup Core Data I don’t have persistence. I will appreciate if you can help me to setup Core Data.

Upvotes: 0

Views: 1474

Answers (2)

Mundi
Mundi

Reputation: 80265

It seems from the screenshots that your setup is correct. Link details with jobs like this.

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

Get all details for a job like this

job.details

This is unordered, but you can sort them using sortedArrayUsingDescriptors.

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

Upvotes: 0

Keyur Akbari
Keyur Akbari

Reputation: 167

Refer this. May be it's useful to you...

http://www.raywenderlich.com/85578/first-core-data-app-using-swift

Upvotes: 0

Related Questions