使用以下代码。
+(void)getQuarterList:(NSString *)user_id
{
if ([self checkInternet])
{
NSString *url=[NSString stringWithFormat:@"%@/api/v1/quarters.json",MainURL];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"id":user_id};
// NSDictionary *parameters = @{};
// NSDictionary *parameters = @{@"id":user_id,@"auth_token":auth_token};
[manager POST:url parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject)
{
NSDictionary *dict=[[NSDictionary alloc]initWithDictionary:responseObject];
//NSMutableArray *dict=[[NSMutableArray alloc]initWithArray:responseObject];
NSLog(@"dict%@",dict);
if ([dict valueForKey:@"Success"])
{
NSNotification *notif1 = [NSNotification notificationWithName:@"quarterDetailsNotifier" object:[dict valueForKey:@"Success"]];
[[NSNotificationCenter defaultCenter] postNotification:notif1];
}
else if ([dict valueForKey:@"noData"])
{
NSNotification *notif1 = [NSNotification notificationWithName:@"noDateNotifier" object:[dict valueForKey:@"Error"]];
[[NSNotificationCenter defaultCenter] postNotification:notif1];
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
NSNotification *notif1 = [NSNotification notificationWithName:@"quarterDetailsFailNotifier" object:error];
[[NSNotificationCenter defaultCenter] postNotification:notif1];
}];
}
else
{
NSNotification *notif1 = [NSNotification notificationWithName:@"internetFailNotifier" object:nil];
[[NSNotificationCenter defaultCenter] postNotification:notif1];
}
}
我遇到以下错误
2014-05-20 15:39:33.610 TMLP[2770:a0b] The internet is working via WIFI.
2014-05-20 15:39:35.733 TMLP[2770:a0b] Error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x8e4a1a0 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set., NSUnderlyingError=0x8e65ca0 "Request failed: not found (404)"}
2014-05-20 15:39:35.734 TMLP[2770:a0b] -[NSError length]: unrecognized selector sent to instance 0x8e4a180
2014-05-20 15:39:35.737 TMLP[2770:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSError length]: unrecognized selector sent to instance 0x8e4a180'
* 第一次抛出调用堆栈: 如何解决这个错误
答案 0 :(得分:0)
您将error
作为NSNotification
的对象发布。在通知处理程序中,您将其用作NSString
或其他具有方法length
的对象。
答案 1 :(得分:0)
首先要做的事情 您获取的JSON文本应始终以“[”或“{”开头,以便解析器识别它。你得到这个错误的原因显然是因为没有实现。 我建议您通过在线提供的JSON验证器检查您的JSON文本 我建议的第二件事是用于JSON序列化/反序列化
NSJSONSerialization
示例就像这样:
NSDictionary *jsonArray = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error: &error];
options:NSJSONReadingAllowFragments
可能会解决您正在解析的片段问题。如果这没有帮助,另一个选择是从获得的碎片字符串中提取出正确的JSON字符串。这意味着从字符串的开头和结尾消除额外的不需要的字符。
示例如下:
NSURL *url=[NSURL URLWithString:@"yourURL"];
NSData *response = [NSData dataWithContentsOfURL:url];
NSString *badjsonData = [NSString stringWithUTF8String:[response bytes]];
NSString *goodJsonData = [badjsonData substringFromIndex:76];
NSString *finaljsonData = [goodjsonData substringToIndex:[goodjsonData length]-9];
NSData *goodData = [finaljsonData dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSDictionary *jsonArray = [NSJSONSerialization JSONObjectWithData:goodData options:NSJSONReadingAllowFragments error: &error];