gpt4 book ai didi

objective-c - iOS objective-c - JSON 字符串到 NSDictionary 异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:36 25 4
gpt4 key购买 nike

我是 Objective-C 的新手,并遵循了 MapKit 简介教程(位于 here )。我一直在尝试调试将 JSON 字符串传递给 NSDictionary 的问题。我收到以下错误:

2012-08-13 11:18:30.370 ArrestsPlotter[76578:c07] -[__NSCFString JSONValue]: unrecognized
selector sent to instance 0x73a6400
2012-08-13 11:18:30.372 ArrestsPlotter[76578:c07] *** Terminating app due to uncaught
exception 'NSInvalidArgumentException', reason: '-[__NSCFString JSONValue]: unrecognized
selector sent to instance 0x73a6400'
*** First throw call stack:
(0x17b4022 0x131bcd6 0x17b5cbd 0x171aed0 0x171acb2 0x34782 0x35351 0x1c65e 0x17b5e42
0xda49df 0x178894f 0x16ebb43 0x16eb424 0x16ead84 0x16eac9b 0x1ddd7d8 0x1ddd88a 0x47e626
0x3403d 0x20f5)
terminate called throwing an exception

我已将范围缩小到出现问题的这一行:

NSDictionary * root = [responseString JSONValue];

根据 SBJSON 库文档,这是可能的。我认为它与我传递给 NSDictionary 的字符串有关。下面是创建 JSON 字符串的代码:

// 1
MKCoordinateRegion mapRegion = [_mapView region];
CLLocationCoordinate2D centerLocation = mapRegion.center;

// 2
NSString *jsonFile = [[NSBundle mainBundle] pathForResource:@"command" ofType:@"json"];
NSString *formatString = [NSString stringWithContentsOfFile:jsonFile encoding:NSUTF8StringEncoding error:nil];
NSString *json = [NSString stringWithFormat:formatString,
centerLocation.latitude, centerLocation.longitude, 0.5*METERS_PER_MILE];

// 3
NSURL *url = [NSURL URLWithString:@"http://data.baltimorecity.gov/api/views/INLINE/rows.json?method=index"];

// 4
ASIHTTPRequest *_request = [ASIHTTPRequest requestWithURL:url];
__weak ASIHTTPRequest *request = _request;

request.requestMethod = @"POST";
[request addRequestHeader:@"Content-Type" value:@"application/json"];
[request appendPostData:[json dataUsingEncoding:NSUTF8StringEncoding]];
// 5
[request setDelegate:self];
[request setCompletionBlock:^{
NSString *responseString = [request responseString];
NSLog(@"Response: %@", responseString);
[self plotCrimePositions:responseString];

字符串被正确填充,并且在终端中显示如下(整个内容很大,所以我只会发布少量内容):

2012-08-13 11:18:30.210 ArrestsPlotter[76578:c07] Response: {
"meta" : {
"view" : {
"id" : "zzzz-zzzz",
"name" : "Inline View",
"attribution" : "Baltimore Police Department",
"attributionLink" : "http://www.baltimorepolice.org/",
"averageRating" : 0,
"category" : "Crime",
"licenseId" : "CC_30_BY",
"numberOfComments" : 0,
"oid" : 0,
"publicationAppendEnabled" : false,
"publicationStage" : "unpublished",
"rowsUpdatedAt" : 1338813661,
"rowsUpdatedBy" : "n22b-663u",
"signed" : false,
"tableId" : 354024,
"totalTimesRated" : 0,
"viewType" : "tabular",
"columns" : [ {
"id" : -1,
"name" : "sid",
"dataTypeName" : "meta_data",
"fieldName" : ":sid",
"position" : 0,
"renderTypeName" : "meta_data",
"format" : {
}
}, {
"id" : -1,
"name" : "id",
"dataTypeName" : "meta_data",
"fieldName" : ":id",
"position" : 0,
"renderTypeName" : "meta_data",
"format" : {
}
}

如有任何帮助,我们将不胜感激。我意识到我使用的教程有点过时,但我以前从未使用过 JSON,所以我不太确定问题出在哪里。

最佳答案

此问题是由于尝试将消息 JSONValue 发送到 NSString 中的实例引起的,该实例不支持此方法。试试下面的代码

SBJsonParser *jsonParser = [[SBJsonParser alloc] init];
NSError *error = nil;
NSArray *jsonObjects = [jsonParser objectWithString:responseString error:&error];

这应该会为您提供包含响应数据的 NSDictionaries 的 NSArray。

您也可以尝试在此处复制并粘贴您的整个 JSON 响应以检查其是否有效

http://jsonformatter.curiousconcept.com/

编辑:虽然正如其他一些答案所指出的那样,#importing SBJSON.h 应该动态地将 JSONValue 方法添加到 NSString 类通过使用类别。在这里解释

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/occategories.html

关于objective-c - iOS objective-c - JSON 字符串到 NSDictionary 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11937587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com