我正在尝试使用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];
答案 0 :(得分:9)
错误消息的重要部分是:
-[__NSCFString JSONValue]: unrecognized selector sent to instance 0x6ab7a40
__NSCFString
类是NSString
接口的私有实现类,因此您可以假装它NSString
。
因此,我们发现您要向JSONValue
发送NSString
消息,而NSString
表示它无法识别该选择器。 SBJson库将JSONValue
方法添加到NSString
类using a category。
因此,我推断您尚未将NSObject+SBJson.o
与您的应用相关联。如果您将SBJson源文件复制到您的应用程序中,请确保复制到NSObject+SBJson.m
,并确保它包含在目标的“编译源”构建阶段。
如果您构建了一个SBJson库并将您的应用程序链接到该库,则可能需要将-ObjC
标志添加到链接器选项,甚至是-all_load
标志。