objective-c - iOS 4 上运行的 NSJSONSerialization

标签 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
}

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

dyld:找不到符号:_OBJC_CLASS_$_NSJSONSerialization

启动时崩溃....

最佳答案

#if __IPHONE_OS_VERSION_MAX_ALLOWED < 50000在编译时评估。如果您使用 iOS 5 SDK 编译您的代码,则条件将为假。无论如何都会使用 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;
}

关于objective-c - iOS 4 上运行的 NSJSONSerialization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8429972/

相关文章:

ios - 从 iOS 中的控制中心控制应用程序

ios - UITableView 缺少一些分隔线

ios - SKShapeNode.fillColor 不等于原始 UIColor

ios - facebooksdk 无法快速获取 accesstoken

iphone - 释放导航 Controller 堆栈中特定 UIVIewController 的内存

objective-c - 可以在 Objective-C 方法中定义 C 函数吗?

objective-c - 创建相同 NSWindowController 类类型的多个窗口

objective-c - 如何打印出变量的内存地址?

ios - 将 UIImage 数据上传到服务器获取内存峰值?

ios - 创建跨类的全局对象