RESTKIT对象映射取决于属性名称



我在restkit上看到一些奇怪的行为并映射对象。在我的目标对象中,如果我有一个名为"描述"的NSString *属性,则整个映射将失败。将其更改为任何其他名称或评论,一切都成功了。无论我是否设置了该属性的地图,都可以在简单的测试类中复制它。

我可以重现它。

服务器正在返回的JSON:

{
    id = 1;
    name = item1;
},
    {
    id = 2;
    name = item2;
}

我要映射到SimpleObject.h的对象。请注意,描述和不存在的属性都在JSON中,这意味着我不认为这是因为"描述"缺少:

#import <Foundation/Foundation.h>
@interface SimpleObject : NSObject
@property (nonatomic, assign) NSInteger identifier;
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *description;
@property (nonatomic, retain) NSString *nonexistant;
@end

simpleObject.m:

#import "SimpleObject.h"
@implementation SimpleObject
@synthesize identifier;
@synthesize name;
@synthesize description;
@synthesize nonexistant;
@end

我在AppDelegate中创建映射:

RKObjectManager *objectManager = [RKObjectManager managerWithBaseURLString:@"http://127.0.0.1/test"];
// Setup our object mappings
RKObjectMapping *testMapping = [RKObjectMapping mappingForClass:[SimpleObject class]];
[testMapping mapKeyPath:@"id" toAttribute:@"identifier"];
[testMapping mapKeyPath:@"name" toAttribute:@"name"];
 // Register our mappings with the provider using a resource path pattern 
[objectManager.mappingProvider setObjectMapping:testMapping forResourcePathPattern:@"/products"];

在我的didloadobjects方法中,我有:

- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects
{
    NSLog(@"Loaded products: %@", objects);
    SimpleObject *obj = [objects objectAtIndex:0];
    NSLog(@"Loaded product ID %d -> Name: %@ ", obj.identifier, obj.name);
}

此输出:

Finished performing object mapping. Results: {
    "" =     (
        (null),
        (null)
    );
}

如果我评论描述属性(但不存在),那么一切都有效:

Finished performing object mapping. Results: {
    "" =     (
        "<SimpleObject: 0x8a4d040>",
        "<SimpleObject: 0x8a50130>"
    );
}

是否存在映射仅针对此属性名称失败的原因?如果我将名称更改为"描述"以外的任何内容,它也会成功。

它与nsObject的描述属性相冲突。将其重命名为其他(例如DESC)。

最新更新