SBJSON-разбор NSString в NSDictionary - PullRequest
2 голосов
/ 23 февраля 2012

Я пытаюсь проанализировать строку NSString, содержащую данные JSON, в NSDictionary с использованием SBJson 3.0.4, но когда я это делаю, я получаю эту ошибку:

"WebKit отклонил необработанное исключение в webView: shouldInsertText: replaceDOMRange: GivenAction: делегат: - [__NSCFString JSONValue]: нераспознанный селектор, отправленный экземпляру 0x6ab7a40"

Насколько я знаю (что не очень далеко), JSON, который я получаю, действителен, поэтому я не знаю, почему это происходит. Мой код тоже хорошо компилируется ... Вот оно:

NSString *tempURL = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?address=%@&sensor=true",userInput.text];
NSURL *url = [NSURL URLWithString:tempURL];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url 
                                            cachePolicy:NSURLRequestReturnCacheDataElseLoad
                                        timeoutInterval:30];
// fetch the JSON response
NSData *urlData;
NSURLResponse *response;
NSError *error;

// make the synchronous request
urlData = [NSURLConnection sendSynchronousRequest:urlRequest 
                                returningResponse:&response 
                                            error:&error];

// construct a String around the Data from the response
NSString *data = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
NSDictionary *feed = [data JSONValue];

1 Ответ

9 голосов
/ 24 февраля 2012

Важная часть сообщения об ошибке такова:

-[__NSCFString JSONValue]: unrecognized selector sent to instance 0x6ab7a40

Класс __NSCFString является частным классом реализации для интерфейса NSString, так что вы можете просто притвориться, что он говорит: NSString.

Итак, мы видим, что вы отправляете сообщение JSONValue на NSString, а NSString говорит, что он не распознает этот селектор. Библиотека SBJson добавляет метод JSONValue к классу NSString , используя категорию .

Итак, я понял, что вы не связали NSObject+SBJson.o с вашим приложением. Если вы скопировали исходные файлы SBJson в свое приложение, убедитесь, что вы скопировали в NSObject+SBJson.m и убедитесь, что оно включено в фазу сборки «Compile Sources» вашей цели.

Если вы создали библиотеку SBJson и привязали к ней свое приложение, вам может понадобиться добавить флаг -ObjC в параметры компоновщика или даже флаг -all_load.

...