1

restkit patchobject を使用してコンテンツを更新するだけです。最初にメソッド呼び出しが呼び出されたときに成功します。しかし、2 回目に同じメソッドを呼び出すと、アプリが NSInternal 不一致エラーでクラッシュします。同じクラスの adddescriptor を追加できません。ありがとうございます。以下のリンクにも同じ問題がありますが、解決方法がわかりません。

Restkit + Objective-c - 同じ Web サービスへの複数の呼び出し

ここに私のメソッドコードがあります

-(void)setContact:(int)_orgID :(int)_personID :(Person *)p1
{
    AddressScreenViewController *addressView= [[AddressScreenViewController alloc]init];
    addressView.mobileno = p1.mobile_phone;
    addressView.workno = p1.work_phone;
    addressView.homeno = p1.home_phone;
    addressView.address1=p1.address1;
    addressView.address2=p1.address2;
    addressView.city=p1.city;
    addressView.zip=p1.zip;
    [AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
    LoginAppDelegate * appDelegate = [[UIApplication sharedApplication] delegate];
    RKObjectManager *objectManager = [RKObjectManager sharedManager];
    [objectManager setRequestSerializationMIMEType:RKMIMETypeJSON];

RKObjectMapping *personRequestMapping = [RKObjectMapping requestMapping];


[personRequestMapping addAttributeMappingsFromDictionary:@{ @"mobileno" : @"phone_numbers.mobile_number", @"workno" : @ "phone_numbers.work_number" , @"homeno" :@"phone_numbers.home_number",@"address1":@"mailing_address.address1",@"address2":@"mailing_address.address2",@"city":@"mailing_address.city",@"zip":@"mailing_address.zip"}];
    RKLogConfigureByName("RestKit", RKLogLevelWarning);
    RKLogConfigureByName("RestKit/Network", RKLogLevelTrace);
    RKLogConfigureByName("RestKit/ObjectMapping", RKLogLevelTrace);
   RKRequestDescriptor *requestDescriptor =[RKRequestDescriptor requestDescriptorWithMapping:personRequestMapping objectClass:[AddressScreenViewController class] rootKeyPath:@"person"];

[objectManager  addRequestDescriptor:requestDescriptor];

NSString * orgPath = [NSString stringWithFormat:myurl];

[objectManager patchObject:addressView path:orgPath parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *result)
 {

     NSLog(@"result: %@", result);

 } failure:^(RKObjectRequestOperation *operation, NSError *error) {
     NSLog(@"failuer function");
 }];

}
4

2 に答える 2

1

あなたが直面している問題は、同じリクエスト記述子を複数回追加しているためです。たとえば、アプリ デリゲートで、すべての要求および応答記述子を 1 回だけ設定する必要があります。

+ (void)setupDescriptors {
    RKObjectManager *objectManager = [[AppDelegate  appDelegate] objectManager];
    objectManager.requestSerializationMIMEType = RKMIMETypeJSON;
    NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful);
    // Add Request Descriptors
    //

    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[Human rkEntityMappingForResponse:YES] method:RKRequestMethodAny pathPattern:nil keyPath:@"human" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

    RKRequestDescriptor *userRequestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:[User rkObjectMappingForRequest:YES] objectClass:[User class] rootKeyPath:@"user" method:RKRequestMethodAny];
    RKRequestDescriptor *signupUserRequestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:[User rkObjectMappingForSignupRequest:YES] objectClass:[User class] rootKeyPath:@"user" method:RKRequestMethodAny];


    [objectManager addRequestDescriptorsFromArray:@[signupUserRequestDescriptor,userRequestDescriptor]];

    RKResponseDescriptor *userResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[User rkEntityMappingForResponse:YES] method:RKRequestMethodAny pathPattern:nil keyPath:@"user" statusCodes:statusCodes];


    [objectManager addResponseDescriptorsFromArray:@[userResponseDescriptor,responseDescriptor]];
}

ただし、シナリオによっては、複数のリクエスト記述子を追加したい場合があります。これは、REST キットの作成者が回答した動的マッピングによって行われます。以下のリンクをご覧ください。

Restkit 0.2 で特定のクラスに 2 つのリクエスト記述子を追加する

これが役立つことを願っています。

于 2014-04-24T14:17:15.510 に答える
0

同じキーの記述子を 2 回追加することはできません。コードを追加していませんが、「パッチ」を呼び出しているメソッドにすべてのマッピングと記述子を追加していることはわかっています。しないで...

構成を使用法から分離します。すべてのマッピングと記述子のセットアップ コードを 1 つのメソッドに入れ、他の操作を行う前に一度呼び出します。次に、「パッチ」を適用する場合は、それを行うだけで追加のマッピングを含まない別のメソッドを呼び出します。

于 2013-07-04T19:44:07.497 に答える