Having spent too much time trying to find best practices, here again I ask for help, hoping that I am not the only one who is struggling with this:
I have NSManaged Objects like these:
import Foundation import CoreData class Credential: NSManagedObject { @NSManaged var credentialArrivalDate: String? @NSManaged var credentialBarCode: String? @NSManaged var credentialComment: String? @NSManaged var credentialCountCheckIn: Int @NSManaged var credentialCountCheckOut: Int @NSManaged var credentialDepartureDate: String? @NSManaged var credentialId: String? @NSManaged var credentialIsArrived: Bool @NSManaged var credentialIsCheckedOut: Bool @NSManaged var credentialIsHost: Bool @NSManaged var credentialLastModificationDate: String? @NSManaged var credentialMemberControlled: String? @NSManaged var credentialNumberOfPeople: Int @NSManaged var credentialRSVP: Int @NSManaged var credentialTypeId: String? @NSManaged var credentialTypeName: String? @NSManaged var credentialZoneId: String? @NSManaged var credentialZoneName: String? @NSManaged var credentialHosts: Set<Host>? @NSManaged var credentialMember: Member @NSManaged var credentialExtensionFields: Set<ExtensionFields>? @NSManaged var credentialDeltaFirstCheckIn: String? @NSManaged var credentialDeltaFirstCheckOut: String? @NSManaged var credentialIsCheckedIn: Bool }
I have a connection with Entity Entity:
import Foundation import CoreData class Member: NSManagedObject { @NSManaged var memberCompany: String @NSManaged var memberEMail: String @NSManaged var memberFirstName: String @NSManaged var memberId: String @NSManaged var memberJob: String @NSManaged var memberLastModificationDate: String @NSManaged var memberLastName: String @NSManaged var memberPhoneNumber: String @NSManaged var memberTitle: String @NSManaged var memberCredential: Credential }
What I'm trying to do is serialize my Credential object for JSON using NSJSONSerialization.dataWithJSONObject to generate my JSON and POST it to the server.
However, I have an error while serializing my object, and I believe that this is because my object does not comply with this (from the Apple documentation):
An object that can be converted to JSON must have the following properties:
- The top-level object is NSArray or NSDictionary.
- All objects are instances of NSString, NSNumber, NSArray, NSDictionary, or NSNull.
- All dictionary keys are instances of NSString.
- Numbers are not NaN or infinity.
So how can I serialize my object in JSON? Should I find a way to convert a member to a dictionary, and then try to find a way to set this dictionary as a value for my credential relationship?
Did I miss the built-in handler that processes it?
I apologize if this is not clear, but any help would be very pleasant.
Thank you in advance.
Hugo
EDIT :
As suggested in the answer, I tried to extract the dictionary instead of NSManagedObject, but the registered dictionary is empty (however, the same code worked for a very simple class with several string attributes and no relation), here is the code:
// create Credential entity let newCredential = NSEntityDescription.insertNewObjectForEntityForName("Credential", inManagedObjectContext: self.managedObjectContext!) as! Credential // create Credential entity let newMember = NSEntityDescription.insertNewObjectForEntityForName("Member", inManagedObjectContext: self.managedObjectContext!) as! Member // instanciate some fields newCredential.credentialId = "44444" newMember.memberFirstName = "TEST" // set the relationship newCredential.credentialMember = newMember // retrieve currentCredential let requestGuest = NSFetchRequest(entityName: "Credential") // get a dictionary instead of NSManagedObject requestGuest.resultType = NSFetchRequestResultType.DictionaryResultType let fetchedGuest = (managedObjectContext!.executeFetchRequest(requestGuest, error:nil))! // no need to cast here ? println(fetchedGuest.description)