2015-07-12 23 views
0

JSON REST的API,在大小非平凡的要求我进行序列化和互动值对象的形式使用数据,所以目前我无论是REST API:我怎样才能用值对象高效地工作在iOS

  • 手动编写的值对象
  • 使用的值对象生成像JSON加速器

手动编写的值对象具有生产效率低的缺点,以及具有回去每次码有些变化。有映射器可以用于数据绑定,但我觉得他们的方式太过分了,以便像JSONModel,ObjectMapper等。

另一方面,推测Objective-C模型的生成器似乎非常脆弱并且产生不合标准的代码(例如,在您期望NSString的地方提供NSNumber,这可能是崩溃的主要来源)。

什么是有顶的生产力,同时保持代码质量的良好水平的好办法。

回答

3

你试过地幔(https://github.com/Mantle/Mantle)? 您可以定义属性的类型的值你所期望:

@property (nonatomic, copy, readonly) NSURL *URL; 
@property (nonatomic, copy, readonly) NSURL *HTMLURL; 
@property (nonatomic, copy, readonly) NSNumber *number; 
@property (nonatomic, assign, readonly) GHIssueState state; 
@property (nonatomic, copy, readonly) NSString *reporterLogin; 
@property (nonatomic, strong, readonly) GHUser *assignee; 
@property (nonatomic, copy, readonly) NSDate *updatedAt; 

然后你就可以知道哪个属性在此方法中JSONKeyPathsByPropertyKey匹配,如:

+ (NSDictionary *)JSONKeyPathsByPropertyKey { 
    return @{ 
     @"URL": @"url", 
     @"HTMLURL": @"html_url", 
     @"number": @"number", 
     @"state": @"state", 
     @"reporterLogin": @"user.login", 
     @"assignee": @"assignee", 
     @"updatedAt": @"updated_at" 
    }; 

确保您的目标是一个MTLModel的子类,并符合MTLJSONSerializing协议,如下所示:

@interface GHIssue : MTLModel <MTLJSONSerializing> 
+0

我还没试过。但是从扫描Github页面,我可以看到Mantle是如何比JSONModel更好的映射器。事情是,它仍然基本上只是一个映射器。我肯定会去看看,谢谢! – keyboardsamurai