Ungültiger Typ in JSON schreiben (NSConcreteData)?

Ich bin mit AFNetworking zu veröffentlichen, die das audio mit einigen Daten. Ich bin immer folgende exception.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (NSConcreteData)'

Ich bin mit diesem code..

dict=@{@"access_token":[defaults valueForKey:@"TOKEN"],@"email":email,@"prayer":passData};

if ([NSJSONSerialization isValidJSONObject:dict]) {
        NSLog(@"Proper JSON Object");

    }
    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];

    NSURL *URL = [NSURL URLWithString:url];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL
                                                           cachePolicy:NSURLRequestReloadIgnoringCacheData  timeoutInterval:10];

    [request setHTTPMethod:@"POST"];
    [request setValue: @"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:jsonData];
 AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    op.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
    [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {}

Muss ich post-Werte in diesem format

{
    "access_token" = 2cf0d8a66654fa4f;
    email = "";
    prayer =     {
        audio = <63616666 00010000 64657363 00000000 00000020 40e58880 00000000 696d6134 00000000 00000044 00000040 00000002 00000000 6b756b69 00000000 00000000 66726565 0000000>
 98903013 31faae9c bb7b0780 80808080>;
        "category_id" = "";
        description = "";
        "expired_date" = "Expiration Date";
        "is_audio" = 1;
        "is_urgent" = 0;
        "prayer_access_id" = "";
        "prayer_type_id" = 1;
        subject = "";
    };
}

Ich weiß nicht, warum dies passiert ist, ich habe Werte gepostet, bevor Sie mit diesem format, aber wenn ich versuche zu posten von audio-Daten, erhalte ich diese exception.
Vielen Dank im Voraus

Bearbeiten

Hier bin ich bei dem Daten

 NSData *audioFile=[self audioData];
 if (audioFile==nil) {
        [passData setObject:@"" forKey:@"audio"];
        [passData setObject:@"0" forKey:@"is_audio"];

    }else{

        [passData setObject:audioFile forKey:@"audio"];
        [passData setObject:@"1" forKey:@"is_audio"];
    }


-(NSData *)audioData{
    NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(
                                                            NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docsDir = [dirPaths objectAtIndex:0];
    NSString *soundFilePath = [docsDir
                               stringByAppendingPathComponent:@"recordTest.caf"];

    NSURL *url = [NSURL fileURLWithPath:soundFilePath];
    NSData *audioData=[NSData dataWithContentsOfURL:url];
    return audioData;
}

das was ich einfügen audio-Datei

  • zeigen Sie, dass passData Initialisierung.
  • vielen Dank für replay habe ich initlized in der viewdidload-Methode postData=[NSDictionary dictionary]; passData=[NSMutableDictionary dictionary];
  • Was ist der Datentyp, die audio-Taste in der passData Wörterbuch? Eigentlich möchte ich, um zu sehen, welche Art von Daten, die Sie eingefügt haben in Ihrem Wörterbuch.
  • developer.apple.com/library/ios/documentation/Foundation/...
  • muss ich irgendwelche basecode64-format für audio.ich bin nur das senden NSData keine Konvertierung
  • Ja! müssen Sie konvertieren NSData zu base64EncodedString.

InformationsquelleAutor karthikeyan | 2015-08-22
Schreibe einen Kommentar