开发者

JSON in COCOA (with YAJL)

开发者 https://www.devze.com 2022-12-30 01:44 出处:网络
at first, sry for my english... :) I\'m using the YAJL Framework http://github.com/gabriel/yajl-objc My file look like this:

at first, sry for my english... :)

I'm using the YAJL Framework http://github.com/gabriel/yajl-objc

My file look like this:

[ [ 3753700,  
{ "altitude" : 36950,  
      "heading" : 129.918421384319,  
      "latitude" : 47.554033252495699,  
      "longitude" : 8.2125612837369903,  
      "pointType" : "EXTRAPOLATED",  
      "speed" : 455.04395392093699,  
      "timestamp" : 1273252673301,  
      "verticalRate" : 0.0  
    }   
  ],  
  [ 3753700,  
    { "altitude" : 36950,  
      "heading" : 129.918421384319,  
      "latitude" : 47.552708437680799,   
      "longitude" : 8.2149074662342798,  
      "pointType" : "EXTRAPOLATED",  
      "speed" : 455.04395392093699,  
      "timestamp" : 1273252674555,  
      "verticalRate" : 0.0  
    }  
  ]  
]

I've tried it in x-variant, but I always get a 'NSInvalidArgumentException' from console:

2010-05-07 20:17:30.998 testApp[2365:207] *** -[NSConcreteData yajl_JSON]: unrecognized selector sent to instance 0x1353d0
2010-05-07 20:17:31.006 testApp[2365:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSConcreteData yajl_JSON]开发者_开发百科: unrecognized selector sent to instance 0x1353d0'

How to read the data correctly?

thx for help


Did you add the ‘-ObjC‘ and ‘-load_all‘ commands to your linker flags for your target? If they're not present then categories present in static libraries will not be available in the compiled binary.

From the docs: Under 'Other Linker Flags' in your target, add -ObjC and -all_load (So NSObject+YAJL category is loaded).


I'm not aware of the framework you are using but have you tried the json-framework available on Google Code? I used it in several projects and never had any problems with it.

+ (NSString *)stringWithUrl:(NSURL *)url {
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url
                                                cachePolicy:NSURLRequestReturnCacheDataElseLoad
                                            timeoutInterval:30];
    NSData *urlData;
    NSURLResponse *response;
    NSError *error;

    urlData = [NSURLConnection sendSynchronousRequest:urlRequest
                                    returningResponse:&response
                                                error:&error];

    return [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
}

+ (id)objectWithUrl:(NSURL *)url {
    SBJSON *jsonParser = [SBJSON new];
    NSString *jsonString = [self stringWithUrl:url];

    return [jsonParser objectWithString:jsonString error:NULL];
}

With these methods you can easily call [YourJSONHelperClass objectWithUrl:yourServiceUrl] which will hand you a NSDictionary in return.

hth
–f

0

精彩评论

暂无评论...
验证码 换一张
取 消