2015-04-04 15 views
19

W Xcode 6.3 beta z systemem Swift 1.2 Z pozoru udało mi się pobrać obiekt JSON z interfejsu API, ale debugger twierdzi, że obiekt nie ma właściwości. API jest uruchomiony na localhost i nazywa się tak:Dlaczego Xcode 6.3 beta debugger pokazuje, że Swift NSData ma liczbę bajtów wynoszącą 190, ale nie ma właściwości?

NSURLConnection.sendAsynchronousRequest(request, queue: queue, 
    completionHandler: completionHandler) 

completionHandler jest zamknięcie z przerwania w nim:

let completionHandler = 
{ 
    (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in 
    // BREAKPOINT HERE 
} 

Debuger pokazuje, że w Xcode 6.3 beta z Swift 1.2 dane: NSData! to obiekt ObjectiveC.NSObject o rozmiarze 190 bajtów, ale bez właściwości, co wydaje się zdecydowanie sprzeczne. Po prostu chcę danych JSON, które mam nadzieję, są ukryte gdzieś w tych bajtach. Nie wiem, czy winę za to zajmuje debugger lub kod, który wymaga aktualizacji dla Swift 1.2, mojego zrozumienia rzeczy lub czegoś innego. Po prostu chcę JSON.

post-script

dane JSON był tam cały czas, jak liczba bajtów zasugerował, i coraz to było bardzo proste (używając SwiftyJSON):

let json = JSON(data: data) 

Zupełnie co się stało właściwości w debugerze beta Xcode 6.3 pozostaje jednak tajemnicą. Nie dodaję tego jako odpowiedzi na moje własne pytanie, ponieważ podczas gdy działa, niekoniecznie musi to być odpowiedź. Jestem zbyt nowy, by Swift wiedział, jaka może być prawdziwa odpowiedź, a nawet jeśli taka istnieje.

+4

Jaki jest faktyczny problem? Jakie wyniki oczekujesz? Czy wersja 6.3 nie działa zgodnie z przeznaczeniem? Jeśli tak, czy możemy usunąć wszystkie rzeczy dotyczące Xcode 6.2 i sprawić, by pytanie to było bardziej skupione, z lepszym wyjaśnieniem, na czym polega problem? – nhgrif

+0

Edytowane. Możliwe jest wskazanie słabości bez uzyskania [pasywnej-] agresywnej ngii, wszyscy staramy się po prostu tutaj dogadać. MJB. –

+3

Nie jestem agresywny. Wskazuję na obawy. Twoje pytanie jest niejasne. Głosowałem, aby to zamknąć. Twoje pytanie dotyczy wersji Xcode 6.3, prawda? Więc wyciąć wszystkie rzeczy Xcode 6.2. Jest to istotne tylko o tyle, o ile powie: "To działało w wersji 6.2, ale teraz nie działa w wersji 6.3". Następnie wyjaśnij dokładniej swój dokładny problem. Czy obiekt jest po prostu niewłaściwie zinterpretowany przez debuggera (ale nadal możesz go poprawnie używać)? Czy rzeczywiście otrzymujesz niewłaściwy typ obiektu zwróconego przez metodę? – nhgrif

Odpowiedz

2

NSData jest enkapsulacją nieprzetworzonych bajtów danych, zanim zostanie przetłumaczona na ciąg lub zostanie przetworzona jako JSON.

Jeśli chcesz zobaczyć, jakie dane zawiera, wówczas można użyć NSJSONSerialization (let jsonDictionary = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil))

a następnie odczytać słownika jak każdy inny: let value = jsonDictionary["key"]

Mam nadzieję, że pomocne.

Powiązane problemy