Reputation: 3
Am using following code.
+(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];
}
}
am having following error
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'
* First throw call stack: how to solve this error
Upvotes: 0
Views: 404
Reputation: 3204
First things first.
Your obtained JSON text should always start with a "[" or "{" for the parser to recognise it. And the reason you are getting this error is clearly because this is not fulfilled.
I suggest you check your JSON text through a JSON validator which is available online.
And the Second thing I Suggest is to use for JSON Serialization/Deserialization is
NSJSONSerialization
And Example would be like this :
NSDictionary *jsonArray = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error: &error];
The options:NSJSONReadingAllowFragments
might solve your problem of parsing fragments that you are getting right now. If this doesn't help, another option would be to extract out the proper JSON string from the obtained fragmented string.This means eliminating the extra unwanted characters from the starting and end of the string.
An Example would be like this :
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];
Upvotes: 0
Reputation: 7935
You post error
as an object of NSNotification
. And in notifcation handler you use it as NSString
or other object that has method length
.
Upvotes: 0