2011-12-08 58 views
0

運行缺少什麼我在這裏:NSJSONSerialization在iOS 4

+ (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得到.....

dyld的在iPhone 3G上運行它:找不到符號:_OBJC_CLASS _ $ _ NSJSONSerialization

在啓動時崩潰....

回答

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; 
} 
+1

不錯的一個,它做到了。 – bandejapaisa

+2

它工作時,我跑在Xcode的代碼,但是當通過testflight安裝在iOS 4.3.1的應用程序崩潰。下面是崩潰日誌說:找不到符號:_OBJC_CLASS _ $ _ NSJSONSerialization –

+0

廣東話你只是覈對[NSJSONSerialization類] =零!? – Konrad77