2014-06-16 32 views
9
Yani, bir yerel sunucuda bazı istekleri yapmak AFNetworking 2.0 (Köprü-Alınlıklı objc framework) kullanıyorum

ile ayrıştırma tepki json. Swift'i kullanarak kodlamak için birkaç dersi takip ettim. Bu, aşağıdaki koddur: json'u alır ve başarıyla yazdırır. tepkisi böyle bir şeydir:iOS Swift: AFNetworking

(
     { 
     "_id" = 539f0973e3c7f4ab1f6078f5; 
     name = Manufacturer01; 
    }, 
     { 
     "_id" = 539f18c5e3c7f4ab1f6078f6; 
     name = Manufacturer02; 
    } 
) 

Ancak, ben ilk elemanını almak için response[0] çalıştı ... bunu ayrıştıramadığımız, ama ben yapmaya çalışacağım zaman simülatörü ve hatta Xcode6 çöker: (lldb) > po response[0]. Her şeyi denedim, gördüğüm her örnek sonucu nasıl yazdıracağımızı açıklıyor ama her bir alanı ayrıştırmakla ilgili bir şey yok.

value = Some { 
    Some = (instance_type = Builtin.RawPointer = 0x0b240710 -> 0x00bc5da0 (void *)0x00bc5db4: __NSCFArray) 
    } 

Herhangi ipucu: Ben hata ayıklamaya çalıştığınızda

response nesne şöyle? Şimdiden teşekkürler!

+0

Ayrıca bu sorun var. Earth'te JSON Dictionary değerlerini bir string değişkenine nasıl ataırım? Ben var serverID: String? 'Ve self.serverID = responseObject [" server_id "] denerken? String 'Xcode – Sean

+0

çöküyor Bu yaklaşım ile başarı vardı: http://stackoverflow.com/questions/24259756/unable-to-parse-json-from-afnetworkings-responseobject – heycarsten

+0

@heycarsten Ne yazık ki Simülatörde EXC_BAD_INSTRUCTION ve EXC_BREAKPOINT üzerinde Bu kod ile cihaz. :(It @Sean – Koesh

cevap

-5

Sizin örnek tepkisi JSON geçerli değil.

sizin örnek, bir Array ise, JSON tırnak ve iki nokta üst üste de köşeli parantez yerine parens, alan adlarını olurdu yerine belirtilerini eşittir. Örneğin:

[ 
    { 
    "_id": 1234, 
    "name": "foo bar" 
    }, 
    { 
    "_id": 12122, 
    "name": "baz" 
    } 
] 

Ayrıca jsonlint.com

+1

Muhtemelen debugger. – mAu

+1

basılmış sözlüğün içeriği var @ mAu haklı.Json iyi yapılandırılmış, bu hata ayıklayıcı temsilidir. – Koesh

1

bu

if let responseArray = response as? NSArray { 
    let firstElement = responseArray[0] 
    // do something with the first element 
} 
0

Ben senin sorunun geri successBlock içinde göndermeden içinde bırakır düşünüyorum denemek JSON linterlerinin birini ör .: bakın. Alınan bilgiler açıklama nesnesinde düzgün sunulmadığından.

var jsonArrayDictionary = response.result.value as? [[String: Any]] 

for item in jsonArrayDictionary { 
    dump(item["_id"] as? String) 
    dump(item["name"] as? String) 
} 

Muhtemelen bunu yapmalı.