2016-01-05 12 views
6

मैं इस AFNetworking समस्या का उपयोग कर इसे मेरे लिए { है और } तरह URL बनाने के लिए कैसे सोचा parameter (यूआरएल (घुंघराले ब्रेसिज़ शामिल)

/api/sth.json?filter[condition]={"53891":[123],"53892":[123,124]} 

तो मेरी कोड इस तरह दिखता है मैं उत्तीर्ण करने की आवश्यकता के निर्माण के लिए AFHTTPRequestOperation का उपयोग करना बना यह सरल):

[self GET:myUrl parameters:@{ 
          @"filter" : @{ 
            @"condition" : @{ 
              @"53891" : @[@(123)], 
              @"53892" : @[@(123),@(124)]} 
            }, 

          } success:^(AFHTTPRequestOperation *operation, id responseObject) { 
           success(operation,responseObject); 
          } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
           failure(operation,error); 
          }]; 

लेकिन यह उम्मीद नहीं उत्पादन है उत्पादन:

/api/sth.json?filter[condition][53891][]=123&filter[condition][53892][]=123&filter[condition][53892][]=124 

parameters में AFHTTPRequestOperation में ऐसा करने का कोई तरीका है या मैन्युअल रूप से मुझे इसे स्ट्रिंग में रखना होगा?

संपादित करें:

मेरे वर्तमान समाधान है कि तरह है:

+(NSString*)convertFromDictionary:(NSDictionary*)dic { 
    NSMutableString *outputStr = [NSMutableString new]; 
    [outputStr appendString:@"{"]; 
    NSArray *allKeys = [[dic allKeys] sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:nil ascending:NO]]]; 
    for(NSString *key in allKeys) { 
     NSArray *objects = dic[key]; 
     [outputStr appendString:[NSString stringWithFormat:@"\"%@\":[",key]]; 
     for(NSNumber *nb in objects) { 
      [outputStr appendString:[NSString stringWithFormat:@"%li",[nb longValue]]]; 
      if(![nb isEqual:[objects lastObject]]) { 
       [outputStr appendString:@","]; 
      } else { 
       [outputStr appendString:@"]"]; 
      } 
     } 
     if(![key isEqual:[allKeys lastObject]]) { 
      [outputStr appendString:@","]; 
     } 
    } 
    [outputStr appendString:@"}"]; 
    return outputStr; 
} 

कहाँ इनपुट शब्दकोश है: @{@"53892" : @[@(123),@(124)]}

लेकिन यह अधिक स्ट्रिंग तुलना की तुलना में कुछ भी नहीं है। AFNetworking के साथ इसे प्राप्त करने के लिए कोई और चालाक तरीका नहीं है क्योंकि यह काफी मानक यूआरएल पैरामीटर है?

+1

आप 'setParameterEncoding' विधि के साथ अपने ग्राहक को' AFJSONParameterEncoding' सेट है: मेहुल जैसा कि पहले कहा, (स्ट्रिंग के लिए अपने मूल्य परिवर्तित) "पैरामीटर" शब्दकोश बनाने से पहले अपनी पैरामीटर "हालत" serializing की कोशिश? – Niko

+0

हाँ, काम नहीं किया – Kuba

उत्तर

1

आप एक शब्दकोश को पार्स करने के 2 अलग-अलग तरीके चाहते हैं, और यह स्वचालित रूप से नहीं किया जा सकता है।

NSError *error; 
NSDictionary *dict = @{@"53891" : @[@(123)], @"53892" : @[@(123),@(124)]}; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error]; 

NSString *params = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 

[self GET:myUrl parameters:@{ 
           @"filter" : @{ 
           @"condition" : params 
           }, 

         } success:^(AFHTTPRequestOperation *operation, id responseObject) { 
          success(operation,responseObject); 
         } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
          failure(operation,error); 
         }]; 
0

कोष्ठक के साथ एक संख्या रैपिंग expressions के लिए है:

@(6 + x * 2012) 

उत्कृष्ट स्पष्टीकरण पोस्ट पढ़ें https://stackoverflow.com/a/9349981/3096087

शायद कोष्टक में लपेटकर किसी भी तरह AFHTTPRequestOperation साथ को खराब करता।

@{@"53892" : @[@123,@124]} 
1

आप ऐसा करने की जरूरत:

  1. शब्दकोश बनाने

    NSNumber *number = @123; 
    

    तो एक इनपुट शब्दकोश साथ निम्नलिखित तरीके का प्रयास करें:

    NSNumber सीधे निम्नलिखित तरीके से घोषणा की जाती है

  2. जेसन एस बनाएं शब्दकोश से tring (प्रथम NSData को शब्दकोश में परिवर्तित NSJsonSerialization का उपयोग कर और फिर NSString करने के लिए thata NSData वस्तु परिवर्तित)
  3. अब प्रारूप में अपने URL में इस स्ट्रिंग जो आप
  4. संलग्न नया स्ट्रिंग से यूआरएल बना सकते हैं और इसे पास करना चाहते हैं संलग्न पैरामीटर शब्दकोश के साथ प्राप्त करें/पोस्ट विधि nil
संबंधित मुद्दे