項(xiàng)目需求
從本地?cái)?shù)據(jù)庫里拿出15條記錄,上傳給服務(wù)器。
也就是上傳一個數(shù)組。這個數(shù)組里里面有15個對象。每個對象都是一個NSDictionary 。
需求分析
大部分情況下,上傳數(shù)據(jù)給服務(wù)器,都是使用NSDictionary。
基本會是這樣的格式:
{
id : @"123";
token :@"01";
}
基本都會是一個字典,都是鍵值對。
現(xiàn)在需要上傳一個數(shù)組。
我們應(yīng)該是下面這個格式:
{
id : @"123";
token :@"01";
data : 需要上傳的數(shù)組dataArr。
}
方案解決
需要上傳的數(shù)組,我們是不能直接傳遞一個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);
}];
易錯點(diǎn)提醒
在轉(zhuǎn)成JsonString 的時候,一定不要犯下面這個錯誤。
如果需要上傳的參數(shù)是這樣的字典:
{
data : 需要上傳的dataArr。
}
你要明確一點(diǎn),post 的 parameters 永遠(yuǎn)是一個字典。
你不能這樣做(把字典的key data ,也轉(zhuǎn)成了JSON字符串里面的)。
下面是錯誤示范(多數(shù)人會死在這個上面)
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);
}];