restkit,如何在没有对象映射的情况下访问对象

问题描述:

如何在不使用对象映射的情况下访问原始响应json数据。我有以下反应数据。它包含一个nextSyncToken,用于执行查询和项目集合(在items会话中)。restkit,如何在没有对象映射的情况下访问对象

我创建了代表items中内容的Item对象的对象映射。但是,我也需要nextSyncToken字段。我如何在没有对象映射的情况下访问它。由于syncToken与对象映射没有关系。我该如何处理这个问题。

{ 
    "kind": "calendar#events", 
    "nextSyncToken": "COib8eSw78gCEOib8eSw78gCGAU=", 
    "items": [ 
    { 
     "id": "_74rk4cpg84o42b9k8or3gb9k74s34b9p8ks34b9m851kac9m64rk4ci36g", 
     "created": "2010-04-16T11:09:31.000Z", 
     "updated": "2010-04-16T11:10:27.487Z", 
     "summary": "iCal test 1", 
     "start": { 
     "dateTime": "2010-03-16T21:00:00+08:00" 
     }, 
     "end": { 
     "dateTime": "2010-03-16T22:00:00+08:00" 
     } 
    }, 
    { 
     "id": "_752j2h1j6cq4cba68csjeb9k8p33eba1692k4ba284qj8ea688rj2chh6c", 
     "status": "confirmed", 
     "created": "2011-10-18T09:36:02.000Z", 
     "updated": "2011-10-18T09:36:02.000Z", 
     "summary": "New Event", 
     "start": { 
     "dateTime": "2011-10-18T03:45:00+08:00" 
     }, 
     "end": { 
     "dateTime": "2011-10-18T08:15:00+08:00" 
     } 
    } 
    ] 
} 

我的映射代码:

let eventMapping = RKEntityMapping(forEntityForName: "SGEvent", inManagedObjectStore: managedObjectStore) 

    eventMapping.addAttributeMappingsFromDictionary([ 
     "id":    "identifier", 
     "summary":   "summary", 
     "created":   "createdAt", 
     "updated":   "updatedAt", 
     "location":   "location", 
     "description":  "notes", 
     "start.date":  "allDayStart", 
     "end.date":   "allDayEnd" 
     ]) 

    let startTimeMapping = RKAttributeMapping(fromKeyPath: "start.dateTime", toKeyPath: "startTime") 
    startTimeMapping.valueTransformer = self.googleDateTransformer 
    eventMapping.addPropertyMapping(startTimeMapping) 

    let endTimeMapping = RKAttributeMapping(fromKeyPath: "end.dateTime", toKeyPath: "endTime") 
    endTimeMapping.valueTransformer = self.googleDateTransformer 
    eventMapping.addPropertyMapping(endTimeMapping) 

    eventMapping.identificationAttributes = ["identifier"] 

    let responseDescriptor = RKResponseDescriptor(mapping: eventMapping, method: .GET, 
     pathPattern: "calendars/:calendarId/events", keyPath: "items", 
     statusCodes: RKStatusCodeIndexSetForClass(RKStatusCodeClass.Successful)) 

    objectManager.addResponseDescriptor(responseDescriptor) 

我的请求操作:

objectManager.getObjectsAtPath("calendars/\(identifier)/events", 
     parameters: [self.ACCESS_TOKEN: accessToken], success: { (operation, results) -> Void in 



      callback?(results: nil, error: nil) 
     }) { (_, error) -> Void in 
      print(error) 
    } 

一般来说,你会添加其他的响应描述符与适当的映射来处理这个问题。

当使用objectManager.getObjectsAtPath时,假设您有其他一些响应描述符(这会导致调用成功块),那么您可以通过浏览HTTP操作中的响应数据来获取原始数据(然后可以解压缩您的数据认为合适):

operation.HTTPRequestOperation.responseData 

(或使用responseString代替responseData)。

+0

可以举个例子。我对RestKit和iOS非常新颖 –

+0

这就是在成功块中获取响应数据的所有代码,然后将它用于JSON序列化程序或类似程序。 – Wain

if let dict = try? NSJSONSerialization.JSONObjectWithData(operation.HTTPRequestOperation.responseData, options: .AllowFragments) as? [String: AnyObject], 
     let nextSyncToken = dict?["nextSyncToken"] as? String{ 
    print(nextSyncToken)//get the nextSyncToken 
}