SBJSON将NSString解析为NSDictionary

时间:2012-02-23 19:46:53

标签: objective-c json nsstring nsdictionary sbjson

我正在尝试使用SBJson 3.0.4将包含JSON数据的NSString解析为NSDictionary,但是当我这样做时,我收到此错误:

  

“WebKit在webView中丢弃了一个未捕获的异常:shouldInsertText:replacementDOMRange:givenAction:delegate: - [__ 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 个答案:

答案 0 :(得分:9)

错误消息的重要部分是:

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

__NSCFString类是NSString接口的私有实现类,因此您可以假装它NSString

因此,我们发现您要向JSONValue发送NSString消息,而NSString表示它无法识别该选择器。 SBJson库将JSONValue方法添加到NSStringusing a category

因此,我推断您尚未将NSObject+SBJson.o与您的应用相关联。如果您将SBJson源文件复制到您的应用程序中,请确保复制到NSObject+SBJson.m,并确保它包含在目标的“编译源”构建阶段。

如果您构建了一个SBJson库并将您的应用程序链接到该库,则可能需要将-ObjC标志添加到链接器选项,甚至是-all_load标志。