Ios 对象映射器/核心数据,对象映射器零值字段

Ios 对象映射器/核心数据,对象映射器零值字段,ios,json,swift,core-data,objectmapper,Ios,Json,Swift,Core Data,Objectmapper,我需要使用一些映射器(例如,对象映射器)将检索到的JSON对象保存到核心数据中。 我正在使用rest api检索此json: [ { "event_id": "1", "event_name": "Lungo il tevere", "event_image_url": "https:\/\/www.dayroma.it\/wp-content\/uploads\/2016\/06\/event_fb-9400.jpg", "event_content": "&l

我需要使用一些映射器(例如,对象映射器)将检索到的JSON对象保存到核心数据中。 我正在使用rest api检索此json:

[
{
    "event_id": "1",
    "event_name": "Lungo il tevere",
    "event_image_url": "https:\/\/www.dayroma.it\/wp-content\/uploads\/2016\/06\/event_fb-9400.jpg",
    "event_content": "<b>Lungo il Tevere Roma 2016, bancarelle sulle banchine del Tevere<\/b>\r\n\r\n&nbsp;\r\n\r\n&nbsp;",
    "event_start_date": "2016-07-29",
    "event_end_date": "2016-07-30",
    "event_start_time": "22:00:00",
    "event_end_time": "03:00:00",
    "location_name": "Lungotevere",
    "location_address": "Piazza Navona 2, Roma",
    "location_latitude": "41.897785",
    "location_longitude": "12.472971"
},
{
    "event_id": "8",
    "event_name": "test 7 - VIlla BOrghese",
    "event_image_url": "https:\/\/www.dayroma.it\/wp-content\/uploads\/2016\/06\/event_fb-9398.jpg",
    "event_content": "TEst villa borghese",
    "event_start_date": "2016-07-29",
    "event_end_date": "2016-07-30",
    "event_start_time": "22:00:00",
    "event_end_time": "02:00:00",
    "location_name": "Villa Borghese",
    "location_address": "Villa Borghese 4, Roma",
    "location_latitude": "41.912888",
    "location_longitude": "12.485208"
}
}

这里是我的对象核心属性:

extension Event {

@NSManaged var eventId: Int
@NSManaged var eventName: String?
@NSManaged var eventImageUrl: String?
@NSManaged var eventContent: String?
@NSManaged var eventStartTime: NSDate?
@NSManaged var eventEndTime: NSDate?
@NSManaged var eventStartDate: NSDate?
@NSManaged var eventEndDate: NSDate?
@NSManaged var locationName: String?
@NSManaged var locationAddress: String?
@NSManaged var locationLatitude: NSNumber?
@NSManaged var locationLongitude: NSNumber?
}

这里是实现可映射的核心数据对象模型:

class Event: NSManagedObject, Mappable {


override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) {
    super.init(entity: entity, insertIntoManagedObjectContext: DataController().managedObjectContext)
}

required init?(_ map: Map) {
    let ctx = DataController().managedObjectContext
    let entity = NSEntityDescription.entityForName("Event", inManagedObjectContext: ctx)
    super.init(entity: entity!, insertIntoManagedObjectContext: ctx)

    mapping(map)
}

func mapping(map: Map) {

    eventId   <- map["event_id"]
    eventName   <- map["event_name"]
    eventImageUrl   <- map["event_image_url"]
    eventContent   <- map["event_content"]
    eventStartTime   <- map["event_start_time"]
    eventEndTime   <- map["event_end_time"]
    eventStartDate   <- map["event_start_date"]
    eventEndDate   <- map["event_end_date"]
    locationName   <- map["location_name"]
    locationAddress   <- map["location_address"]
    locationLatitude   <- map["location_latitude"]
    locationLongitude   <- map["location_longitude"]



}
}

大部分田地都是零, 你能帮我弄明白是什么问题吗


谢谢您,即使在等待NSNumber或NSDate时,您也只会收到字符串

要使此映射正常工作,应使用ObjectMapper中的自定义转换,并按原样设置映射:

birthday    <- (map["birthday"], DateTransform())
生日号码?在里面 //从字符串转换值?到Int? formatter.numberStyle=.DecimalStyle 返回格式化程序.numberFromString(值!) },toJSON: {(值:NSNumber?->字符串?)在 //将值从Int?转换为字符串? 如果let value=value { 返回字符串(值) } 归零 }) 并使用它:

people <- (map["people"], transform)

people即使在等待NSNumber或NSDate时,您也只会收到字符串

要使此映射正常工作,应使用ObjectMapper中的自定义转换,并按原样设置映射:

birthday    <- (map["birthday"], DateTransform())
生日号码?在里面 //从字符串转换值?到Int? formatter.numberStyle=.DecimalStyle 返回格式化程序.numberFromString(值!) },toJSON: {(值:NSNumber?->字符串?)在 //将值从Int?转换为字符串? 如果let value=value { 返回字符串(值) } 归零 })
并使用它:

people <- (map["people"], transform)

people从字符串转换为日期的代码在哪里?模型上有
NSDate
属性,但JSON包含字符串。您在哪里转换为
NSDate
?我不知道在哪里转换每种类型的json格式。。。。这就是问题所在,对象id是int32或int64,那么我的纬度和经度都是双精度的,所有的日期……在哪里可以转换它们?当你给这些属性赋值时。我想也许你的映射框架应该这样做?所以,也许你应该看看框架代码,看看。不过,自己编写代码并不难。从字符串转换为日期的代码在哪里?模型上有
NSDate
属性,但JSON包含字符串。您在哪里转换为
NSDate
?我不知道在哪里转换每种类型的json格式。。。。这就是问题所在,对象id是int32或int64,那么我的纬度和经度都是双精度的,所有的日期……在哪里可以转换它们?当你给这些属性赋值时。我想也许你的映射框架应该这样做?所以,也许你应该看看框架代码,看看。不过,自己编写代码并不难。
private static let formatter: NSNumberFormatter = NSNumberFormatter()
private let transform = TransformOf<NSNumber, String>(fromJSON:
        { (value: String?) -> NSNumber? in
            // transform value from String? to Int?
            formatter.numberStyle = .DecimalStyle
            return formatter.numberFromString(value!)
    }, toJSON:
        { (value: NSNumber?) -> String? in
            // transform value from Int? to String?
            if let value = value
            {
                return String(value)
            }
            return nil
})
people <- (map["people"], transform)