iOS - 如何把数组作为参数传递给 AFNetworking (Objective-C)

3
我可以帮您翻译成中文。这段话的意思是:我有一个 PHP 文件,想要用它来处理数据。该 PHP 文件包含一个函数,该函数以数组作为参数。
“PHP 函数”如下:
func((array)$input->foos as &$foo){
  $request = mb_strtolower($foo->request);
  $found = false;
  $loopCount = 0;
  while($found === false && $loopCount < 3){
    if($request === 'single' || $request === 'corner'){
      $foo->request = $single_priority[$loopCount];
    }
    else if($request === 'double'){
      $foo->request = $double_priority[$loopCount];
    }
    else if($request === 'quad'){
      $foo->request = $quad_priority[$loopCount];
    }

    $rooms = getRooms($foo, $link, $roomcounts[$foo->request]);
    if($room = $rooms->fetch_assoc()){
      $found = true;



      if ($loopCount === 0){
        if(!$link->query("REPLACE INTO reservations VALUES('{$room['room_id']}', '{$foo->user_id}', 
            '{$foo->move_in_date}', '{$foo->move_out_date}', 'Incoming', '{$foo->date_added}')")){
            $arr = array();
            $arr['error'] = "Error: " . $link->error;
            echo json_encode($arr);
            die();
        }

        array_push($result, array('user_id' => $foo->user_id, 'room_assigned' => $room['room_id'], 'request_status' => 0));
        if(!$link->query("DELETE FROM res_waiting WHERE user_id = '{$foo->user_id}'")){
            $arr = array();
            $arr['error'] = "Error: " . $link->error;
            echo json_encode($arr);
            die();
        }
      }
      else{
        if(!$link->query("INSERT IGNORE INTO reservations VALUES('{$room['room_id']}', '{$foo->user_id}', 
            '{$foo->move_in_date}', '{$foo->move_out_date}', 'Incoming', '{$foo->date_added}')")){
            $arr = array();
            $arr['error'] = "Error: " . $link->error;
            echo json_encode($arr);
            die();
        }

        array_push($result, array('user_id' => $foo->user_id, 'room_assigned' => $room['room_id'], 'request_status' => 1));
      }
    }

    $loopCount += 1;
  }

  if (found === false){
    array_push($result, array('user_id' => $foo->user_id, 'room_assigned' => 0, 'request_status' => 2));
  }
}

我是使用AFNetworking来连接Objective-C和php代码的。
Objective-C代码:
-(void) connectToPHP:(NSArray *)parameters
{
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
   NSString *URLString = [[NSString alloc] initWithFormat:@"ip.address/email.php"];
    [manager POST:URLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSData *jsonData = responseObject;
        NSError * error=nil;
        id reponse = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
        NSLog(@"JSON response: %@", [reponse objectForKey:@"response"]);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        if(error){
            NSLog(@"%@ Error:", error);
        }
    }];
}

函数调用:

NSDictionary *foo = @{
                      @"id" : @"2011011",
                      @"request" : @"single",
                      @"gender" : @"M",
                      @"username" : @"name",
                      };

NSArray *arr = [NSArray arrayWithObjects:foo, nil];

[self connectToPHP:arr];

然而,当我运行此代码时,其中的PHP文件函数不能正常运行,并且出现错误。我认为问题出在如何将数组作为参数传递上。

你想要实现什么?展示一下你的函数,这样我们就可以“猜测”……也许你想传递的不是一个数组,但只有你知道。 - YvesLeBorg
更新的问题。 - king
1个回答

1

你需要将路径数组作为参数传递,格式为@{@"data": @[params]}

NSDictionary *foo = @{
                      @"id" : @"2011011",
                      @"request" : @"single",
                      @"gender" : @"M",
                      @"username" : @"name",
                      };

NSArray *arr = [NSArray arrayWithObjects:foo, nil];


// convert your object to JSOn String
NSError *error = nil;
NSString *createJSON = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:arr
                                                                                      options:NSJSONWritingPrettyPrinted
                                                                                        error:&error]
                                             encoding:NSUTF8StringEncoding];


 NSDictionary *pardsams = @{@"data": createJSON};

// finally start your request
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

NSLog(@"Dict %@",pardsams);
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];

[manager POST:@"ip.address/email.php" parameters:pardsams success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);

}];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接