2015-02-06 76 views
0

我有以下對象發佈字符串JSON陣列RestKit

@interface MyObject : NSObject 

@property(nonatomic, copy) NSNumber *objectId; 
@property(nonatomic, copy) NSArray *tags; // array of strings, e.g. @[@"one", @"two"] 

@end 

我想後使用RestKit(0.23版本)的請求到URL

<base_url>/do_something/:objectId 

請求正文應該只是一個根據tags屬性的字符串JSON數組,即

["one", "two"] 

我有一個路由def獨立非執行董事。現在

RKRoute *route = [RKRoute routeWithClass: [MyObject class] pathPattern: do_something/:objectId method: RKRequestMethodPOST]; 
[objectManager.router.routeSet addRoute: route]; 

,我想創建一個請求

[objectManager requestWithObject: instanceOfMyObject method: RKRequestMethodPOST path: nil parameters: nil]; 

我應該如何配置[RKObjectMapping requestMapping],我應該如何定義一個RKRequestDescriptor獲得上述(JSON字符串數組)的映射?

我曾嘗試以下:

RKObjectMapping *requestMapping = [RKObjectMapping requestMapping]; 
[requestMapping addPropertyMapping: [RKAttributeMapping attributeMappingFromKeyPath: @"tags" toKeyPath: nil]]; 
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping: requestMapping objectClass: [MyObject class] rootKeyPath: nil method: RKRequestMethodAny]; 

然而,在RKAttributeMapping崩潰使用nil作爲關鍵路徑。使用在要求任何未零值會導致它的身體是一個JSON字典

{"someKeyPath": ["one", "two"]} 
+0

您是否嘗試過創建映射和描述符?顯示您嘗試的代碼並解釋它做錯了什麼。 – Wain 2015-02-06 17:45:09

+0

@編輯過的問題。 – Cimlman 2015-02-12 08:21:14

+0

在這種情況下使用NSJSONSerialization會更容易 – Wain 2015-02-12 09:54:59

回答

0

我相信RestKit設計的心態,你應該張貼的對象,而不是如。 {"tags": [ "tag1", "tag2" ]}。同答覆一樣;如果主體不是一個對象(只是一個原始的字符串或數組),RestKit不會很好地處理它。

也就是說,您可以自己序列化請求並將其發佈到主體。例如:

NSMutableURLRequest *request = [[objectManager requestWithObject:nil method:RKRequestMethodPOST path:@"do_something/objectId" parameters:nil] mutableCopy]; 

[request setHTTPBody:[NSJSONSerialization dataWithJSONObject:doableIds options:0 error:nil]]; 

RKObjectRequestOperation *operation = [objectManager objectRequestOperationWithRequest:request success:nil failure:nil]; 
[objectManager enqueueObjectRequestOperation:operation];