为什么JSONModel会这样做

时间:2014-09-14 05:08:56

标签: objective-c json jsonmodel

我喜欢JSONModel库及其概念。虽然只是看实施遇到了一些疑问。 在初始化中

-(instancetype)initWithData:(NSData *)data error:(NSError *__autoreleasing *)err

参数数据转换为字符串并传递给下一个初始化程序

-(id)initWithString:(NSString *)string usingEncoding:(NSStringEncoding)encoding error:(JSONModelError**)err

在此方法中,将其转换回NSData以便与NSJSONSerialization

一起使用

为什么不做这样的事情......

-(instancetype)initWithData:(NSData *)data error:(NSError *__autoreleasing *)err
{
    //not converting nsdata to an nsstring -- using it directly
    if (!data.length) return nil;


    //read the json
    JSONModelError* initError = nil;
    id obj = [NSJSONSerialization JSONObjectWithData:data
                                             options:kNilOptions
                                               error:&initError];

    if (initError) {
        if (err) *err = [JSONModelError errorBadJSON];
        return nil;
    }

    //init with dictionary
    id objModel = [self initWithDictionary:obj error:&initError];
    if (initError && err) *err = initError;
    return objModel;

}
-(id)initWithString:(NSString *)string usingEncoding:(NSStringEncoding)encoding error:(JSONModelError**)err
{
    //check for nil input
    if (!string) {
        if (err) *err = [JSONModelError errorInputIsNil];
        return nil;
    }

    //create an instance
    JSONModelError* initError = nil;

    id objModel = [self initWithData:[string dataUsingEncoding:encoding] error:&initError];
    if (initError && err) *err = initError;
    return objModel;
}

这有意义吗?我们应该避免两次转换吗?

1 个答案:

答案 0 :(得分:2)

感谢@Johnykutty解决了这个问题:)

相关提交在此处:https://github.com/icanzilb/JSONModel/commit/02619d9d3bad92bc0ea6b75a45cc69d16b5e0801

现在运行任何初始化程序都会避免来回转换数据类型:

  • $(".filters").unbind("click")
  • -initWithString:error:
  • -initWithString:usingEncoding:error:
  • -initWithDictionary:error: