Я могу добавить объект в API через JSON, когда отправляю запрос с помощью byte char[], однако он не работает, когда я конвертирую NSDictionary в NSData и отправляю его. В чем проблема?
Вот когда это работает.
// Request
NSURL* URL = [NSURL URLWithString:@"SOME URL"];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:URL];
request.HTTPMethod = @"POST";
request.timeoutInterval = 30.000000;
// Headers
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
// Body
const char bytes[98] = "{\n\t\"user\" :\n\t{\n\t\t\"email\" : \"[email protected]\",\n\t\t\"username\" : \"example\",\n\t\t\"password\" : \"cryptx\"\n\t}\n}";
request.HTTPBody = [NSData dataWithBytes:bytes length:98];
// Connection
NSURLConnection* connection = [NSURLConnection connectionWithRequest:request delegate:nil];
[connection start];
Это когда не работает:
- (void)addUser:(User *)user
{
NSURL* URL = [NSURL URLWithString:@"API_URL"];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:URL];
request.HTTPMethod = @"POST";
request.timeoutInterval = 30.000000;
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
NSData *data = [self createJSONWithUsername:@"X" andEmail:@"[email protected]" andPassword:@"pass"];
[request setHTTPBody:data];
NSLog(@"%@", [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding]);
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
[connection start];
}
- (NSData *)createJSONWithUsername:(NSString *)username andEmail:(NSString *)email andPassword:(NSString *)password
{
NSArray *objects = [NSArray arrayWithObjects:password, email, username, nil];
NSArray *keys = [NSArray arrayWithObjects:@"password", @"email", @"username", nil];
NSDictionary *userDataDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
NSDictionary *userDictionary = [NSDictionary dictionaryWithObjectsAndKeys:userDataDictionary, @"user", nil];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:userDictionary options:NSJSONWritingPrettyPrinted error:nil];
return jsonData;
}
Второй не добавляет пользователя, а второй добавляет.
РЕДАКТИРОВАТЬ
JSON ОТПРАВЛЯЕТСЯ, т.е. переменная jsonString
{
"user" : {
"email" : "[email protected]",
"username" : "X",
"password" : "pass"
}
}
const char byte[96]
имеет длину 98 символов... Я не работаю с Objective-C, поэтому понятия не имею, является ли это проблемой. (Во всяком случае, это в случае с этим работает.) - person T.J. Crowder   schedule 18.03.2014NSData
(jsonData
), преобразуя его вNSString
(jsonString
) и обратно вNSData
(data
)? - person lootsch   schedule 18.03.2014}
. Это полный пример? - person Joe   schedule 18.03.2014error*
для операции NSJSONSerialization, затем после операции проверить результат на nil и, если nil, вывести значение ошибки. - person Hot Licks   schedule 18.03.2014