項(xiàng)目需求
從本地?cái)?shù)據(jù)庫(kù)里拿出15條記錄,上傳給服務(wù)器蒋畜。
也就是上傳一個(gè)數(shù)組声畏。這個(gè)數(shù)組里里面有15個(gè)對(duì)象。每個(gè)對(duì)象都是一個(gè)NSDictionary 姻成。
需求分析
大部分情況下,上傳數(shù)據(jù)給服務(wù)器科展,都是使用NSDictionary均牢。
基本會(huì)是這樣的格式:
{
id : @"123";
token :@"01";
}
基本都會(huì)是一個(gè)字典,都是鍵值對(duì)才睹。
現(xiàn)在需要上傳一個(gè)數(shù)組徘跪。
我們應(yīng)該是下面這個(gè)格式:
{
id : @"123";
token :@"01";
data : 需要上傳的數(shù)組dataArr。
}
方案解決
需要上傳的數(shù)組砂竖,我們是不能直接傳遞一個(gè)NSArray的。
必須向下面這樣轉(zhuǎn)成JSON字符串鹃答。
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dataArr options:NSJSONWritingPrettyPrinted error:&error];//此處dataArr參數(shù)的key為"data"的數(shù)組
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
組合之后的上傳字典應(yīng)該是這樣:
{
id : @"123";
token :@"01";
data : JsonString乎澄。
}
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:urlStr parameters:jsonDic success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
//上傳成功
}
} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
NSLog(@"上傳信息失敗%@",error);
}];
易錯(cuò)點(diǎn)提醒
在轉(zhuǎn)成JsonString 的時(shí)候,一定不要犯下面這個(gè)錯(cuò)誤测摔。
如果需要上傳的參數(shù)是這樣的字典:
{
data : 需要上傳的dataArr置济。
}
你要明確一點(diǎn),post 的 parameters 永遠(yuǎn)是一個(gè)字典锋八。
你不能這樣做(把字典的key data ,也轉(zhuǎn)成了JSON字符串里面的)浙于。
下面是錯(cuò)誤示范(多數(shù)人會(huì)死在這個(gè)上面)
NSDictionary *jsonDic = @{ data : 需要上傳的dataArr};
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDic options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:urlStr parameters:jsonData success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
//上傳成功
}
} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
NSLog(@"上傳信息失敗%@",error);
}];