0

サーバーへの POST 要求を実行した後、返されたオブジェクトはマッピングできませんが、必要なインフラストラクチャはすべて作成しました。

問題を単純化するために、「POST オブジェクト」クラスを作成し、応答オブジェクト用に別のクラスを作成しました。(以下は私のコードの重要な部分です)

JSON

リクエスト

{ 
    "USERNAME" : 280S808D08s,
    "PASSWORD" : "lkjl123kjl",
    "DEVICE" : 12345
}

応答

{
    "firstname": "first name here",
    "lastname": "last name here",
    "mobile": "012938012839",
    "email": "john@smith.com",
    "expiry": "2016-05",
    "authorized": true
}

これは私の「POST オブジェクト」クラスの実装です

@interface Login : NSObject

@property NSString *USERNAME;
@property NSString *PASSWORD;
@property NSString *DEVICE;

@end

これらは API メソッドです。

RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Login class]];
[mapping addAttributeMappingsFromArray:@[@"USERNAME", @"PASSWORD",@"DEVICE"]];

RKRequestDescriptor *loginRequest = [RKRequestDescriptor
                                     requestDescriptorWithMapping:[mapping inverseMapping]
                                     objectClass:[Login class]
                                     rootKeyPath:nil
                                     method:RKRequestMethodPOST];

実際の依頼

[objectManager addRequestDescriptor:loginRequest];

// POST
Login* loginUser = [Login new];
loginUser.USERNAME = @"96150001505233";
loginUser.PASSWORD = @"gb168362";
loginUser.DEVICE = @"12345";

[[RKObjectManager sharedManager] postObject:loginUser
                                       path:@"/app_dev.php/api/v2/user/login"
                                 parameters:nil
                                    success:^(RKObjectRequestOperation  *operation, RKMappingResult *mappingResult) {
                                    } failure:^(RKObjectRequestOperation *operation, NSError *error) {
                                    }];

そして今、「RECEIVEDオブジェクト」のクラス

@interface User : NSObject

@property NSString *firstname;
@property NSString *lastname;
@property NSString *email;
@property NSString *mobile;

@end

API メソッド:

RKObjectMapping *userMap = [RKObjectMapping mappingForClass:[User class]];
[userMap addAttributeMappingsFromArray:@[ @"firstname", @"lastname", @"email", @"mobile"]];

RKResponseDescriptor *userResponse = [RKResponseDescriptor
                                      responseDescriptorWithMapping:userMap
                                      method:RKRequestMethodPOST
                                      pathPattern:@"user/login"
                                      keyPath:nil
                                      statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[objectManager addResponseDescriptor: userResponse];

エラー

読みやすいようにきれいに間隔をあけました。

エラー Domain=org.restkit.RestKit.ErrorDomain Code=1001 「読み込まれた応答と一致する応答記述子がありません。」

UserInfo={NSLocalizedFailureReason=200 応答が URL ' http://mywebsite.com/app_dev.php/api/v2/user/login ' から読み込まれましたが、すべて (0) の応答記述子に一致しませんでした:,

NSErrorFailingURLStringKey= http://mywebsite.com/app_dev.php/api/v2/user/login

NSErrorFailingURLKey= http://mywebsite.com/app_dev.php/api/v2/user/login

NSUnderlyingError=0x7fee81d59440 {エラー ドメイン=org.restkit.RestKit.ErrorDomain コード=1001 「検索されたキー パスでマッピング可能なオブジェクト表現が見つかりませんでした。」

UserInfo={NSLocalizedDescription=検索されたキー パスでマッピング可能なオブジェクト表現が見つかりませんでした。

NSLocalizedFailureReason = マッピング操作は、検索されたキー パスでネストされたオブジェクト表現を見つけることができませんでした: マッパーに入力された表現には、次のキー パスでネストされたオブジェクト表現が含まれていることがわかりました: 承認済み、電子メール、有効期限、ファーストネーム、ラストネーム、モバイル

これは、マッピングのキー パスが誤って構成されていることを示している可能性があります。

助けてください :(

4

2 に答える 2

1

2 つの問題があります。

  1. 作成したリクエストのパス パターンと応答記述子が一致しません
  2. 特定のオブジェクトを投稿する場合、応答は同じオブジェクトにマップされるため、全体に対して 1 つのオブジェクトを送信するか、辞書から投稿する必要があります。
于 2016-02-20T14:39:23.860 に答える
0

解決策はかなり単純でした。POST リクエストの keyPath が間違っていました。これに変更する必要がありました。

[[RKObjectManager sharedManager] postObject:loginUser
                                       path:@"user/login"
                                 parameters:nil
                                    success:^(RKObjectRequestOperation  *operation, RKMappingResult *mappingResult) {
                                    } failure:^(RKObjectRequestOperation *operation, NSError *error) {
                                    }];
于 2016-02-26T00:35:23.187 に答える