在花費了太多時間來尋找最佳實踐之後,在這裏我再次尋求一些幫助,希望我不是唯一一個正在努力的人:iOS-Swift:將NSManagedObject序列化爲JSON(有關係)
我已經NSManaged對象這樣的:
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
}
我有一個會員實體的關係:
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
}
我所試圖做的是連載我的Credential對象到JSON使用NSJSONSerialization.dataWithJSONObject生成我的JSON並將其張貼到服務器。
不過,雖然我的序列化對象,我得到一個錯誤,我相信這是因爲我的對象不尊重這個(蘋果文件):
可以轉換成JSON對象必須有以下屬性:
- 頂層對象是NSArray或NSDictionary。
- 所有對象都是NSString,NSNumber,NSArray,NSDictionary或NSNull的實例。
- 所有的字典鍵都是NSString的實例。
- 數字不是NaN或無窮大。
那麼如何將我的對象序列化爲JSON?我是否應該找到某種方法將會員轉換爲字典,然後嘗試找到一種方法將此字典設置爲我與證書關係的值?
我錯過了一個處理它的內置映射器嗎?
對不起,如果不明確,但任何幫助將是非常好的。
提前,謝謝。
雨果
編輯:
作爲一個答案的建議,我想取一本字典,而不是一個NSManagedObject,但記錄的字典是空的(但是,相同的代碼工作了一個非常簡單的有幾個字符串的屬性和沒有關係的類),這裏是代碼:
/*******************************
TEST : Fetch dictionary instead of NSManagedObject
*/
// 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)
/*******************************/
你看過第三方框架,像RestKit? – Wain
使用fetchRequest.resultType = NSFetchRequestResultType.DictionaryResultType從coredata中獲取字典中的數據,然後將其序列化爲json。 – Shoaib
JSON映射器不是太多嗎? +我寧願儘可能使用swift – H4Hugo