【发布时间】:2014-04-21 04:16:42
【问题描述】:
下面的代码引发了异常,我想不通是哪里出了问题:
-(NSDictionary*)prepareParameters:(NSArray*) p_currentParameters
{
NSMutableDictionary *parameters = nil;
if(self.p_currentParameters.count > 0 )
{
parameters = [[NSMutableDictionary alloc] init];
for(int courseIdx = 0; courseIdx < p_currentParameters.count; courseIdx++)
{
CourseDetails* course = p_currentParameters[courseIdx];
NSMutableDictionary *courseData = [[NSMutableDictionary alloc] init];
courseData[@"courseIdx"] = [NSNumber numberWithInteger:course.id];
courseData[@"isFavorite"] = @(course.isFavorite);
courseData[@"isDeleted"] = @(course.isDeleted);
[parameters setObject:courseData forKey:[NSNumber numberWithInt:courseIdx]];
}
}
return parameters;
}
- (void)sendUserDataOnCourses:(NSArray*) p_currentCourses
{
@try
{
NSString *baseURLString = <API ADDRESS>;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];
[parameters setObject:userUniqueId forKey:@"userID"];
[parameters setObject:[self prepareParameters:p_currentCourses] forKey:@"courses"];
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[manager POST:baseURLString
parameters:[[NSDictionary alloc] initWithObjectsAndKeys:jsonString, @"request",nil]
success:^(AFHTTPRequestOperation *operation, id responseObject){
<DO SOME STUFF>
}
failure:^(AFHTTPRequestOperation *operation, NSError *error){
NSLog(@"!!!!!!!!!!!!!! Error: %@ Error code: %d timeout counter:%d", error, error.code, timeoutfailure);
}];
}
@catch (NSException *exception)
{
NSLog(@"sendUserDataOnCourses exception: %@",exception);
}
}
此行发生异常:NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:&error];,异常消息为:Invalid (non-string) key in JSON dictionary。
【问题讨论】:
-
[parameters setObject:courseData forKey:[NSNumber numberWithInt:courseIdx]];你不能那样做。文档上说 (developer.apple.com/documentation/foundation/…)All dictionary keys are instances of NSString.而您使用的是NSNumber。
标签: objective-c json encoding afnetworking