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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass Sie können nicht
NSData
im JSON-Format. Dieaudio
istNSData
. Als dieNSJSONSerialization
Dokumentation sagt:Wenn
NSData
im JSON-Format, müssen Sie es in einen string konvertieren. Der gemeinsame Weg dies zu tun, ist zu base64 Kodieren und dann in das Ziel, decodieren des base64-string).JSONEncoder
ermöglicht einedataEncodingStrategy
und standardmäßig.base64
.Haben Sie einen syntax-Fehler in der Json-text. überprüfen Sie es auf http://www.jsoneditoronline.org und versuchen Sie es erneut, wenn Sie sicher sind, wenn Sie korrekt gebildet Json