gpt4 book ai didi

ios - AFNetworking 将 NSDictionary 作为单个数组值发送,而不是将它们作为完整对象发送

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:54 24 4
gpt4 key购买 nike

我正在尝试发送一个 NSArray *appData,因为它是一个包含 NSDictionaryNSArray(请参阅数据布局下面)但是当我在 PHP 中收到 Array 时,NSDictionary 中的所有值都作为单个数组发送,而不是在同一个数组中他们发送的格式(请参阅下面的 PHP 日志数据)。

NSDictionary* params 中的所有其他值均已正确发送和接收。

这是我的代码中的错误还是问题?如果后者是问题所在,我做错了什么?

注意:我使用的是最新版本的AFNetworking

编辑:作为 @dpassage 回答的结果,我编辑了一个更广泛的测试并将信息作为 form-data 发送。围绕测试的有趣之处在于,发送到服务器的 @"test" 参数在 PHP 中显示良好,但在 @"share":appData 这很奇怪

- (void) checkForUploadEligibility {
NSArray* dates = [myModel getStatsMaxAndMinResults];
if ( dates ) {
NSDictionary* d = [dates objectAtIndex:0];
NSDate* minDate = d[@"minDate"];
NSDate* maxDate = d[@"maxDate"];
NSTimeInterval secondsBetween = [maxDate timeIntervalSinceDate:minDate];

int numberOfDays = secondsBetween / 86400;
numberOfDays = abs(numberOfDays);

if (numberOfDays >= 0) {
myUser = [myModel getCurrentUser];
if ( myUser.userWebID && myUser.authToken ) {
NSArray* appData = [myModel getAllStatsData];
if (!appData) {
return;
}
NSDictionary* params = @{ @"userID": myUser.userWebID,
@"authCode": myUser.authToken,
@"interact":@{@"action":@"uploadAppStats",
@"actionTarget":@"uploadAppStats"},
@"share":appData,
@"test":@[@{@"test1":@{@"test2":@"test2"}},@{@"test3":@"test3"}]
};
[myShare uploadStats:params statsData:appData];
}

}
}
}
- (void) uploadStats:(NSDictionary*)params statsData:(NSArray *)statsData {
NSLog(@"count %i, %@",[statsData count],statsData);
NSURL *url = [[NSURL alloc]initWithString:sysURL];
AFHTTPClient *httpClient = [[AFHTTPClient alloc]initWithBaseURL:url];

NSURLRequest *request = [httpClient requestWithMethod:@"POST" path:sysAppURLPath parameters:params];

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON){
NSLog(@"a: Inside the success block %@",JSON);
if ( [JSON objectForKey:@"ok"] ) {
// [myModel deleteAllStatsData:statsData];
}

}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON){

NSLog(@"json text is: %@", JSON);
NSLog(@"Request failed with error: %@, %@", error, error.userInfo);
}];
// Debug HTTP response
BOOL dbug = YES;
if (dbug) {
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"HTTP r: %@", operation.responseString);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"HTTP Error: %@", operation.responseString);
}
];
}
[operation start];

}

错误日志

count 5, (
{
date = "2013-09-09 16:10:51 +0000";
name = selectRoutine;
shared = 0;
timeSpent = 3;
},
{
date = "2013-09-09 16:10:53 +0000";
name = manageExercises;
shared = 0;
timeSpent = 1;
}, // MORE.....



HTTP Error: array(24) {
multipart/form-data; boundary=Boundary+0xAbCdEfGbOuNdArY
array(5) {
["authCode"]=>
string(32) "e186cdd000a741ef76555009d7e86d80"
["interact"]=>
array(2) {
["action"]=>
string(14) "uploadAppStats"
["actionTarget"]=>
string(14) "uploadAppStats"
}
["share"]=>
array(15) {
[0]=>
array(1) {
["date"]=>
string(19) "2013-09-09 19:52:31"
}
[1]=>
array(1) {
["name"]=>
string(13) "selectRoutine"
}
[2]=>
array(1) {
["timeSpent"]=>
string(1) "3"
}
[3]=>
array(1) {
["date"]=>
string(19) "2013-09-09 19:52:33"
}
[4]=>
array(1) {
["name"]=>
string(14) "manageRoutines"
}
[5]=>
array(1) {
["timeSpent"]=>
string(1) "2"
}
[6]=>
array(1) {
["date"]=>
string(19) "2013-09-09 22:24:31"
}
[7]=>
array(1) {
["name"]=>
string(13) "selectRoutine"
}
[8]=>
array(1) {
["timeSpent"]=>
string(2) "19"
}
[9]=>
array(1) {
["date"]=>
string(19) "2013-09-09 22:24:45"
}
[10]=>
array(1) {
["name"]=>
string(14) "manageRoutines"
}
[11]=>
array(1) {
["timeSpent"]=>
string(2) "14"
}
[12]=>
array(1) {
["date"]=>
string(19) "2013-09-09 22:25:58"
}
[13]=>
array(1) {
["name"]=>
string(15) "manageExercises"
}
[14]=>
array(1) {
["timeSpent"]=>
string(2) "73"
}
}
["test"]=>
array(2) {
[0]=>
array(1) {
["test1"]=>
array(1) {
["test2"]=>
string(5) "test2"
}
}
[1]=>
array(1) {
["test3"]=>
string(5) "test3"
}
}
["userID"]=>
string(24) "5224b598f86f265801000008"
}

最佳答案

问题:

NSArray* appData 被插入到 @"share":appData 以某种方式被翻译成大量的小数组。

解决方案:

不知何故,如果我将 NSArray 插入到 Key-Value NSDictionary @"share" 中,它不会按预期工作。然后我继续将那个 NSArray 更改为一个也不起作用的 NSDictionary

有效的是下面的代码。我必须将 NSArray* appData 重新创建为 NSDictionary* appData2。然后我必须将每个单独的 NSDictionary 数据对象 包装到另一个 NSDictionary 中,但我必须给这个新对象一个明确的数字索引。 .. 这样做之后,它会正确发送信息。

我想我的问题是一个错误?我真的不知道...但如果有人也有这个问题,这可以帮助你。

        NSArray* appData = [myModel getAllStatsData];
if (!appData) {
return;
}

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
NSMutableDictionary* choa = [[NSMutableDictionary alloc]init];
int i = 0;
for (StatsAppUsage*statObj in appData) {

[choa addEntriesFromDictionary:@{[NSNumber numberWithInteger:i]:@{@"date":[dateFormat stringFromDate:statObj.date],
@"name":statObj.name,
@"timeSpent": statObj.timeSpent
}
}];
i++;
}
NSDictionary* appData2 = [[NSDictionary alloc]initWithDictionary:choa];
NSDictionary* params = @{ @"userID": myUser.userWebID,
@"authCode": myUser.authToken,
@"interact":@{@"action":@"uploadAppStats",
@"actionTarget":@"uploadAppStats"},
@"share":appData2
};

@“分享”PHP 输出

(
[0] => Array
(
[date] => 2013-09-09 19:52:31
[name] => selectRoutine
[timeSpent] => 3
)

[1] => Array
(
[date] => 2013-09-09 19:52:33
[name] => manageRoutines
[timeSpent] => 2
)

关于ios - AFNetworking 将 NSDictionary 作为单个数组值发送,而不是将它们作为完整对象发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18704330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com