Tag Archives: Azure Mobile Services iOS SDK

Azure Mobile Services Update Error (1105 – The item provided did not have a valid id)

Azure Mobile Services iOS SDK kullanıp da Native iOS yazdığınız zaman, bazı hatalarla karşılaşa biliyorsunuz. Daha önce bahsetmiş olduğum 1 kendi projelerimden bir tanesinde ben de BackEnd kısmını Azure ile çözüp FrontEnd kısmını iOS Swift ile çözmeye çalıştığımı belirtmiştim.

Yazılımı kolay ve anlaşılır olmasına ve Azure SDK’nın da yeterince donanımlı olmasıyla bir çok sorunun üstesinden gelinse de yine 3.5 saatimi alan bir hata olmadı değil. Bu hata kimi yerlerde “1105 – The item provided did not have a valid id” kimi yerlerde de “1102 – The item provided did not have a valid id” olarak betimleniyor.

Araştırdığımızda ise, hata basitçe; “Sen bana data veriyorsun ama ben ID’yi yakalayıp güncelleme yapamıyorum” diyor. Azure Mobile Service’in PUSH methodu sırasında oluşan bir hata ve sanırım client dil seçeneklerinin bunda da etkisi büyük. Hatanın bulunmaması, yabancıların bunu yaşamadığını gösteriyor en azından :).

Hata?

Azure Mobile Services iOS SDK kullanarak PUSH yapılan method içerisinde Id parametresinin bulunamaması.

Çözüm

Aslında saatlerimi alsa da, çözüm gayet basit. Elinizdeki NSDictionary (ya da farklı bir liste de olur NSMutableArray gibi) listesinde (ki bu AMS üzerinden gelen Model’de olabilir) Id alanının düzgünce tanımlanmış olması gerek. Burada dikkat edilmesi gerekilen şey ise id değil, ID değil, tam olarak Id verilmesi lazım. Liste üzerinde id olsa da ID olsa da yakalamayacaktır.

   func UpdateData(itemToInsert: NSMutableDictionary, complete: ((Bool, NSDictionary) -> Void)!) {
        var isSuccess  = false

        var tid:String? = itemToInsert.valueForKey("Id") as? String
        if tid != nil {
            let uid:NSDictionary = [ "id": tid as String!]
            itemToInsert.addEntriesFromDictionary(uid as [NSObject : AnyObject])
        }

        self.table!.update(itemToInsert as [NSObject : AnyObject],
            completion: {
                updatedItem, error in
                if (error != nil){
                    println(error)
                    isSuccess = false
                    complete(isSuccess, updatedItem);
                }
                else{
                    isSuccess = true
                    complete(isSuccess, updatedItem);
                }
            }
        )
    }

Yukarıdaki kod basitçe gelen listede Id yoksa liste içerisindeki id olarak tanımlı olan veriyi Id olarak atayıp AMS’ye gönderiyor.

Umarım siz de benim gibi bu hata yüzünden saatlerinizi harcamazsınız :).

PS: I’m planning to write this post on english too…


English Version

When you write your project with a new programming language, it’s normal to have some little problems. But sometimes, it’s hard to find an answer to your little annoying bug. “1105 – The item provided did not have a valid id” or “1102 – The item provided did not have a valid id” that kind of bug that irritates you. But its easy to solve.

Problem

Problem is when you are connecting Azure Mobile Services service’s PUSH Method with Azure Mobile Services iOS SDK via swith. It’s not gets your Id value correctly. Even if you use received Model from AMS service.

Answer

It’s ridiculously easy. Send your parameters with Id :D, but it should be named Id (not id, or ID) even it has id field you should add new Id field with same value.

    func UpdateData(itemToInsert: NSMutableDictionary, complete: ((Bool, NSDictionary) -> Void)!) {
        var isSuccess  = false

        var tid:String? = itemToInsert.valueForKey("Id") as? String
        if tid != nil {
            let uid:NSDictionary = [ "id": tid as String!]
            itemToInsert.addEntriesFromDictionary(uid as [NSObject : AnyObject])
        }

        self.table!.update(itemToInsert as [NSObject : AnyObject],
            completion: {
                updatedItem, error in
                if (error != nil){
                    println(error)
                    isSuccess = false
                    complete(isSuccess, updatedItem);
                }
                else{
                    isSuccess = true
                    complete(isSuccess, updatedItem);
                }
            }
        )
    }

It’s normal to have bugs in Azure Mobile Services iOS SDK, it has lots of pros and little cons :).

Keep up the good work!


Versiyon 2.2.0’da bu sıkıntılar düzeltilmiş durumdadır.