2012-02-08 4 views
5

Tôi đang sử dụng RestKit lần đầu tiên và bộ tính năng của nó trông tuyệt vời. Tôi đã đọc tài liệu nhiều lần và tôi đang cố gắng tìm cách gửi các tham số JSON vào nguồn cấp dữ liệu và ánh xạ phản hồi JSON. Từ tìm kiếm trên stackoverflow tôi tìm thấy một cách để gửi các tham số JSON thông qua GET, nhưng máy chủ của tôi chỉ nhận POST.Cách sử dụng Restkit để POST JSON và phản hồi bản đồ

Dưới đây là đoạn code tôi có cho đến nay:

RKObjectMapping *issueMapping = [RKObjectMapping mappingForClass:[CDIssue class]]; 
[objectMapping mapKeyPath:@"issue_id" toAttribute:@"issueId"]; 
[objectMapping mapKeyPath:@"title" toAttribute:@"issueTitle"]; 
[objectMapping mapKeyPath:@"description" toAttribute:@"issueDescription"]; 
RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"http://restkit.org"]; 
RKManagedObjectStore* objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:@"News.sqlite"]; 
objectManager.objectStore = objectStore; 

NSDictionary params = [NSDictionary dictionaryWithObjectsAndKeys: @"myUsername", @"username", @"myPassword", @"password", nil]; 
NSURL *someURL = [objectManager.client URLForResourcePath:@"/feed/getIssues.json" queryParams:params]; 

[manager loadObjectsAtResourcePath:[someURL absoluteString] objectMapping:objectMapping delegate:self] 

Từ thread stackoverflow khác (http://stackoverflow.com/questions/9102262/do-a-simple-json-post-using- restkit), tôi biết cách thực hiện một yêu cầu POST đơn giản với mã sau:

RKClient *myClient = [RKClient sharedClient]; 
NSMutableDictionary *rpcData = [[NSMutableDictionary alloc] init ]; 
NSMutableDictionary *params = [[NSMutableDictionary alloc] init]; 

//User and password params 
[params setObject:password forKey:@"password"]; 
[params setObject:username forKey:@"email"]; 

//The server ask me for this format, so I set it here: 
[rpcData setObject:@"2.0" forKey:@"jsonrpc"]; 
[rpcData setObject:@"authenticate" forKey:@"method"]; 
[rpcData setObject:@"" forKey:@"id"]; 
[rpcData setObject:params forKey:@"params"]; 

//Parsing rpcData to JSON! 
id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeJSON]; 
NSError *error = nil; 
NSString *json = [parser stringFromObject:rpcData error:&error];  

//If no error we send the post, voila! 
if (!error){ 
    [[myClient post:@"/" params:[RKRequestSerialization serializationWithData:[json dataUsingEncoding:NSUTF8StringEncoding] MIMEType:RKMIMETypeJSON] delegate:self] send]; 
} 

Tôi hy vọng một người nào đó sẽ giúp tôi kết hợp hai đoạn mã này thành giải pháp khả thi.

+0

Kiểm tra câu hỏi này, điều này sẽ giúp bạn. http://stackoverflow.com/questions/9102262/do-a-simple-json-post-using-restkit – clopez

Trả lời

1

Để đăng một đối tượng, những gì tôi làm là liên kết đường dẫn đối tượng . Sau đó, sử dụng phương thức postObject từ RKObjectManager.

Tôi cho rằng bạn đã định cấu hình RestKit để bạn có tập đường dẫn cơ sở và xác định ánh xạ đối tượng cho CDIssue của bạn như bạn có trong mã mà bạn đã có. Với ý nghĩ đó, hãy thử mã này:

//We tell RestKit to asociate a path with our CDIssue class 
RKObjectRouter *router = [[RKObjectRouter alloc] init]; 
[router routeClass:[CDIssue class] toResourcePath:@"/path/to/my/cdissue/" forMethod:RKRequestMethodPOST]; 
[RKObjectManager sharedManager].router = router; 

//We get the mapping for the object that you want, in this case CDIssue assuming you already set that in another place 
RKObjectMapping *mapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[CDIssue class]]; 

//Post the object using the ObjectMapping with blocks 
[[RKObjectManager sharedManager] postObject:myEntity usingBlock:^(RKObjectLoader *loader) { 

    loader.objectMapping = mapping; 
    loader.delegate = self; 

    loader.onDidLoadObject = ^(id object) { 
     NSLog(@"Got the object mapped"); 
     //Be Happy and do some stuff here 
    }; 

    loader.onDidFailWithError = ^(NSError * error){ 
     NSLog(@"Error on request"); 
    }; 

    loader.onDidFailLoadWithError = ^(NSError * error){ 
     NSLog(@"Error on load"); 
    }; 

    loader.onDidLoadResponse = ^(RKResponse *response) { 
     NSLog(@"Response did arrive"); 
     if([response statusCode]>299){ 
      //This is useful when you get an error. You can check what did the server returned 
      id parsedResponse = [KFHelper JSONObjectWithData:[response body]]; 
      NSLog(@"%@",parsedResponse); 
     } 

    }; 


}]; 
+0

Cảm ơn bạn đã trả lời. Tôi đã đăng câu hỏi gốc vào tháng 2 và tôi đã từ chối RestKit sau khi không nhận được phản hồi. Tôi không thể nhớ cách sử dụng nó ngay bây giờ để tôi không thể kiểm tra câu trả lời này. Mã này trông khác với những gì tôi nhớ về tài liệu của bộ lưu trữ, vì vậy tôi tự hỏi liệu chúng có thay đổi/cập nhật thư viện một chút không. – elprl