5 Haziran 2013

MKNetwork ile Array Post Etmek

ile hasan

MKNetwork’le array post etmek için iki gündür çabalıyorum. Google’da okuduklarım beni çözüme ulaştırmasa da çözüme giden yolu görmemi sağladı. Aslında çözüm çok ta basitmiş.

MKNetwork’le post etmek istediğim verileri karşılayacak api PHP ile yazıldığından; bir array’in gitmesi için mesela şu şekilde olması gerekiyor;

il_id[]=53&il_id[]=61&id_id=10

Bu; php’de il_id diye bir array oluşturup içine 53, 61,  10 verilerini yerleştirir.

Problem şu; MKNetwork NSMutableDictionary tipinde bir parametre listesi alıyor. Yapısı gereği NSMutableDictionary objesine birden fazla aynı key’e sahip öğe ekleyemiyoruz. yani “il_id[]” keyini sadece bir kere kullanabiliyoruz. Ben de bunu aşmak için uğraş veriyordum. Google’da bulduğum şu sayfa sorunumu çözmedi ama çözümü bulmamı sağladı.

Burada array göndermek için il_id’yi bir dictionary şeklinde yazıp, elemanlarına da mesela

NSDictionary *prm=@{
@"il_id":@{
@"53":@"53",
@"61":@"61",
@"10":@"10"
}
};

NSMutableDictionary *param=[[NSMutableDictionary alloc] initWithDictionary:prm];

şeklinde yazmak lazım geldiği ifade edilmiş. Bu işime yaramayınca şunu denedim;

NSDictionary *prm=@{
@"il_id":@{
@"0":@"53",
@"1":@"61",
@"2":@"10"
}
};

NSMutableDictionary *param=[[NSMutableDictionary alloc] initWithDictionary:prm];

Yani il_id diye bir veri gönderiyorum; 0’ında 53, 1’inde 61, 2’sinde 10 verileri var. Bu kesin işe yarar dedim; hatta bu formatta yazınca il_id’yi kendi otomatik id_id[] haline getirdi.. ama yine yemedi..

Bu 0, 1, 2 nolu indisleri elle yazmak aklıma gelince asıl çözüm de kendiliğinden geldi.

Parametreleri tutan NSMutableDictionary’i şu şekilde doldurmak kafi;

    NSDictionary *prm=@{
@"il_id[0]":@"53",
@"il_id[1]":@"61",
@"il_id[2]":@"10",
};

NSMutableDictionary *param=[[NSMutableDictionary alloc] initWithDictionary:prm];

Böylece api tam da aradığı şekilde il_id’yi bir dizi olarak algılıyor ve içinde de 53, 61, 10 verilerini buluyor.. NSArray’i bu şekle çevirecek küçük bir fonksiyon bu işi otomatik halletmek için yeterli olur zaten.