gpt4 book ai didi

objective-c - RestKit - 发布对象并更新其属性

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:37 26 4
gpt4 key购买 nike

我有一个使用 RestKit 和 Sinatra 支持的服务器的小应用程序。当我将用户对象发布到服务器时,服务器成功保存了用户并以新创建的用户的 json 表示形式进行响应。

这是在客户端创建用户的代码:

  User *currentUser = [User currentUser];  
currentUser.email = @"jacob@mail.com";
currentUser.firstName = @"Jacob";
currentUser.lastName = @"Morris";
currentUser.phone = @"2088956709";
currentUser.deviceId = @"MY-DEVICE-ID";
currentUser.password = @"password";
currentUser.passwordConfirmation = @"password";
currentUser.timeStamp = [NSNumber numberWithFloat:3987987987.12233]; //totally random

RKSpecResponseLoader *loader = [RKSpecResponseLoader responseLoader];
[dataController.rkObjectManager postObject:currentUser mapResponseWith:[User rkObjectMapping] delegate:loader];
[loader waitForResponse];
NSLog(@"Current user id is now: %@", currentUser.userId);
STAssertTrue([loader success], @"response from server should be a success");

从服务器返回的响应如下所示:

"{\"user\":{\"deviceId\":\"MY-DEVICE-ID\",\"email\":\"jacob@mail.com\",\"userId\":5,\"lastName\":\"Morris\",\"phone\":\"\",\"timeStamp\":3987987968.0}}"

服务器负责在成功创建对象后分配userId。当响应返回时,我希望在客户端更新 currentUser 对象。我认为这应该是可能的,因为我正在将对已发布对象的引用传递给对象加载器。如何让对象加载器在成功响应后更新 userId? (我希望能够在不必捕获响应本身的情况下执行此操作。)

最佳答案

是什么让您认为在 postObject 成功后新的 User 对象没有被更新?

我的理解是,如果当您发布对象时,在 RKObjectLoader 中,它将尝试将响应映射回被 POST 的原始对象作为默认行为。让它不这样做的唯一方法是向目标对象开账单。

尝试这样的事情:

[[RKObjectManager sharedManager] postObject: currentUser delegate:self block:^(RKObjectLoader* loader) { 
loader.resourcePath = @"/users";
loader.objectMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForKeyPath:@"/users"];
}];

只要您正确设置了映射(从服务器到 objc-model 以及从 objc-model 到服务器)并且您的 KeyPath 设置正确(是 json { user : { user stuff} }或者只是 { user stuff } ) 那么它应该“正常工作”。

关于objective-c - RestKit - 发布对象并更新其属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8717407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com