NSJSONSerialization在iOS 4上运行

ban*_*isa 0 objective-c ios

我在这里想念的是什么:

+ (id) JSONObjectWithData:(NSData *)data {
#if __IPHONE_OS_VERSION_MAX_ALLOWED < 50000 
    //iOS < 5 didn't have the JSON serialization class
    return [data objectFromJSONData]; //JSONKit
#else      
    NSError *jsonParsingError = nil;
    id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:0   error:&jsonParsingError];
    return jsonObject;
#endif
}
Run Code Online (Sandbox Code Playgroud)

我正在基础SDK 5.0上编译,部署版本是4.0.当我在带有4.2.1的iPhone 3G上运行时,我得到.....

dyld:未找到符号:_OBJC_CLASS _ $ _ NSJSONSerialization

启动时崩溃....

Mat*_*uch 17

#if __IPHONE_OS_VERSION_MAX_ALLOWED < 50000在编译时评估.如果使用iOS 5 SDK编译代码,则条件为false.无论如何都将使用NSJSONSerialization代码.

您应该检查NSJSONSerialization该类是否存在.像这样:

+ (id) JSONObjectWithData:(NSData *)data {
    Class jsonSerializationClass = NSClassFromString(@"NSJSONSerialization");
    if (!jsonSerializationClass) {
        //iOS < 5 didn't have the JSON serialization class
        return [data objectFromJSONData]; //JSONKit
    }
    else {
        NSError *jsonParsingError = nil;
        id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:0   error:&jsonParsingError];
        return jsonObject;
    }
    return nil;
}
Run Code Online (Sandbox Code Playgroud)

  • 当我从xcode运行代码时它工作,但是当在iOS 4.3.1上通过testflight安装时应用程序崩溃了.这是崩溃日志所说的:未找到符号:_OBJC_CLASS _ $ _ NSJSONSerialization (2认同)