Hey,
I am having a trouble mapping a json array response to object array manually, as in, without any network requests. Here is what I am trying to do:
Person class and mapping:
class Person: NSObject {
//name
var name:String!
//number
var number:NSNumber = NSNumber(longLong: 0)
}
class PersonRKObjectMapper{
var mapping:RKObjectMapping!
static let sharedInstance = PersonRKObjectMapper()
private init(){
self.mapping = RKObjectMapping(forClass: Person.self)
self.mapping.addAttributeMappingsFromDictionary(["name":"name","number":"number"])
}
}
TravelGroup wrapper class:
class TravelGroup: NSObject {
var passengers:[Person]!
//test
var test:String!
}
class TravelGroupRKObjectMapper{
var mapping:RKObjectMapping!
static let sharedInstance = TravelGroupRKObjectMapper()
private init(){
self.mapping = RKObjectMapping(forClass: TravelGroup.self)
self.mapping.addAttributeMappingsFromDictionary(["test" : "test"])
self.mapping.addPropertyMapping(RKRelationshipMapping(fromKeyPath: "psgrs", toKeyPath: "passengers", withMapping: PersonRKObjectMapper.sharedInstance.mapping))
}
}
Mapping operation:
let JSONString = "[{\"name\": \"The name\", \"number\": 12345},{\"name\": \"The name\", \"number\": 12345}]"
let MIMEType = "application/json"
let data:NSData = JSONString.dataUsingEncoding(NSUTF8StringEncoding)!
var personList = [Person]()
do{
let personObject:AnyObject = try RKMIMETypeSerialization.objectFromData(data, MIMEType: MIMEType)
let mappingDictionary:NSDictionary = [NSNull():PersonRKObjectMapper.sharedInstance.mapping]
let mapper:RKMapperOperation = RKMapperOperation(representation: personObject, mappingsDictionary: mappingDictionary as [NSObject : AnyObject])
mapper.targetObject = personList
do{
try mapper.execute()
}catch{
print("error here")
}
}catch{
print("error")
}
print(personList)
I am getting the desired answer, but I was just wondering, how would I do this without the wrapper class. Also, sometimes, NSNull() causes Objective-C bridge errors which causes crashes.
Thanks