Objective-C为网络参数创建嵌套字典

Objective-C为网络参数创建嵌套字典,objective-c,json,encoding,afnetworking,Objective C,Json,Encoding,Afnetworking,以下代码引发了一个异常,我无法找出错误: -(NSDictionary*)prepareParameters:(NSArray*) p_currentParameters { NSMutableDictionary *parameters = nil; if(self.p_currentParameters.count > 0 ) { parameters = [[NSMutableDictionary alloc] init]; f

以下代码引发了一个异常,我无法找出错误:

-(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);
    }
}
-(NSDictionary*)准备参数:(NSArray*)p\U当前参数
{
NSMutableDictionary*参数=nil;
如果(self.p_currentParameters.count>0)
{
参数=[[NSMutableDictionary alloc]init];
对于(int courseIdx=0;courseIdx

此行出现异常:
NSData*jsonData=[NSJSONSerialization dataWithJSONObject:parameters options:nsjsonwritingprettyptederror:&error]异常消息是:
JSON字典中的无效(非字符串)键

正如异常所说,您正在尝试将非字符串键(基本上是一个对象)插入字典。JSON序列化方法可能不知道如何序列化该对象,因为它可能没有实现可序列化的协议。我要做的是检查您试图插入字典的每个对象/值,看看它是什么。然后将它们序列化或以字符串形式插入。

[parameters setObject:courseData forKey:[NSNumber numberWithInt:CourseDX]]你不能那样做。文档上说()
所有字典键都是NSString的实例。
您使用的是
NSNumber