JSON Accelerator自动生成代码注意问题

2017-12-15  本文已影响28人  我是小胡胡分胡

JSON Accelerator自动生成代码注意问题

一、注意assign

@property (nonatomic, assign) id content;
@property (nonatomic, assign) id time;
@property (nonatomic, assign) id title;

全是assign。 必然崩溃

    ////Printing description of ((NSISRestrictedToZeroMarkerVariable *)0x000060400064f3c0):
    //0x6040002803c0.marker{id: 614}
    //"title" : "收入了¥1,000",

二、类型不匹配。
总结:
如果model是NSString,可能因为后台 string转number发生崩溃
如果model是基本数据类型,后台可以string、number

1、原先是number,现在转成string ,可以支持。

后台返回的success的不管是string,还是number,都可以转换。
@property (nonatomic, assign) BOOL success;

NSDecimalNumber/NSNumber/NSValue/NSString 都有转化为基础数据类型的方法,boolValue,integerValue等等

self.success = [[self objectOrNilForKey:kachievementAndRanklistSuccess fromDictionary:dict] boolValue];

2、原先是string,现在转为number。 不支持

@property (nonatomic, strong) NSString *msg;```

后台返回的msg改为number后, model并没有变化。  仍然会被当作NSString来处理。但是实际上是nsnumber类型。如果此时调用nsstring的方法,会因为实际是nsnumber类型,而发生崩溃。

self.msg = [self objectOrNilForKey:kachievementAndRanklistMsg fromDictionary:dict];


NSDecimalNumber类

@property (readonly) double doubleValue;

NSNumber类

@property (readonly) char charValue;
@property (readonly) unsigned char unsignedCharValue;
@property (readonly) short shortValue;
@property (readonly) unsigned short unsignedShortValue;
@property (readonly) int intValue;
@property (readonly) unsigned int unsignedIntValue;
@property (readonly) long longValue;
@property (readonly) unsigned long unsignedLongValue;
@property (readonly) long long longLongValue;
@property (readonly) unsigned long long unsignedLongLongValue;
@property (readonly) float floatValue;
@property (readonly) double doubleValue;
@property (readonly) BOOL boolValue;
@property (readonly) NSInteger integerValue API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
@property (readonly) NSUInteger unsignedIntegerValue API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));

@property (readonly, copy) NSString *stringValue;

NSString类

@property (readonly) double doubleValue;
@property (readonly) float floatValue;
@property (readonly) int intValue;
@property (readonly) NSInteger integerValue API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
@property (readonly) long long longLongValue API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
@property (readonly) BOOL boolValue API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); // Skips initial space characters (whitespaceSet), or optional -/+ sign followed by zeroes. Returns YES on encountering one of "Y", "y", "T", "t", or a digit 1-9. It ignores any trailing characters.

//NSValue类
@property (readonly) char charValue;
@property (readonly) unsigned char unsignedCharValue;
@property (readonly) short shortValue;
@property (readonly) unsigned short unsignedShortValue;
@property (readonly) int intValue;
@property (readonly) unsigned int unsignedIntValue;
@property (readonly) long longValue;
@property (readonly) unsigned long unsignedLongValue;
@property (readonly) long long longLongValue;
@property (readonly) unsigned long long unsignedLongLongValue;
@property (readonly) float floatValue;
@property (readonly) double doubleValue;
@property (readonly) BOOL boolValue;
@property (readonly) NSInteger integerValue API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
@property (readonly) NSUInteger unsignedIntegerValue API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));

@property (readonly, copy) NSString *stringValue;



上一篇下一篇

猜你喜欢

热点阅读