Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 可选属性的Restkit动态映射_Ios_Objective C_Restkit_Restkit 0.20 - Fatal编程技术网

Ios 可选属性的Restkit动态映射

Ios 可选属性的Restkit动态映射,ios,objective-c,restkit,restkit-0.20,Ios,Objective C,Restkit,Restkit 0.20,我从ws: { ... error=true, errorMsg="xyz", errorCode="1234" } 但是这些属性是可选的,所以有时它们存在,有时不存在 我为只读错误添加了一个动态映射-仅当error设置为true时 要么: [dynamicMapping addMatcher:[RKObjectMappingMatcher matcherWithKeyPath:@"error" expectedValue:[NSNumber numberWithInt

我从ws:

{
   ...
   error=true,
   errorMsg="xyz",
   errorCode="1234"
}
但是这些属性是可选的,所以有时它们存在,有时不存在

我为只读错误添加了一个动态映射-仅当error设置为true时

要么:

[dynamicMapping addMatcher:[RKObjectMappingMatcher matcherWithKeyPath:@"error" expectedValue:[NSNumber numberWithInt:1] objectMapping:errorMapping]];

如果error=true,一切正常,但如果error属性丢失,我会收到一条警告:

restkit.object_mapping:RKMapperOperation.m:98 Adding mapping error: Could not find an object mapping for keyPath: '<null>'
restkit.object\u映射:RKMapperOperation.m:98添加映射错误:找不到keyPath的对象映射:“”

我只是想摆脱这个警告。解决此问题的最佳做法是什么?如何将该属性标记为可选?

要删除该警告,您需要完成映射配置,因为目前您只提供了一半场景的信息。警告就是警告。它可能是预期的功能,这就是为什么它不是断言

因此,在处理错误情况时,只需添加另一个检查,如:

[dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) {
    NSNumber *errorNumber = [representation valueForKey:@"error"];

    if (errorNumber == nil) {
        return successMapping;
    } else if ([errorNumber isEqualToNumber:[NSNumber numberWithInt:1]]) {
        return errorMapping;
    } 

    return warningMapping;
}];

此外,您不仅限于检查'error'参数。您可以检查响应中的任何其他键和值是否存在以及是否有值。

是否使用此映射和另一个映射?您好,是的,对于状态代码为RKStatusCodeClassServerError=500的服务器错误,我使用相同的映射(“errorMapping”)。因此,如果服务器上发生错误,服务器将以json格式发送错误消息。我的意思是,您的成功场景是如何处理的?通常,动态映射会检查状态,然后返回错误映射或成功映射。如果error=false或未指定错误属性,则返回成功。带有消息的Error=false将是一个警告,我可能还会为此添加一个对象并添加另一个动态映射。问题是,我为密钥路径“people”注册了一个成功映射,因此我的成功json可能如下所示:{people:[…],Error=false,…}因此,为密钥路径nil注册了错误动态映射
[dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) {
    NSNumber *errorNumber = [representation valueForKey:@"error"];

    if (errorNumber == nil) {
        return successMapping;
    } else if ([errorNumber isEqualToNumber:[NSNumber numberWithInt:1]]) {
        return errorMapping;
    } 

    return warningMapping;
}];