2015-04-04 9 views
19

In Xcode 6.3 beta che esegue Swift 1.2 Ho apparentemente recuperato un oggetto JSON da un'API, ma il debugger afferma che l'oggetto non ha proprietà. L'API è in esecuzione su localhost e si chiama così:Perché il debugger Xcode 6.3 beta mostra che Swift NSData ha un conteggio byte di 190 ma nessuna proprietà?

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

completionHandler è una chiusura con un punto di interruzione in esso:

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

il debugger mostra che in Xcode 6.3 beta con Swift 1.2 dati : NSData! è un ObjectiveC.NSObject di 190 byte ma senza proprietà, che sembra contraddittorio. Voglio semplicemente i dati JSON che spero siano nascosti da qualche parte in quei byte. Non so se il debugger, o il codice che necessita di aggiornamento per Swift 1.2, o la mia comprensione delle cose, o qualcos'altro è da biasimare. Voglio semplicemente il JSON.

post-script

I dati JSON era lì tutti insieme, come il numero di byte ha suggerito, e ottenere era molto semplice (utilizzando SwiftyJSON):

let json = JSON(data: data) 

bene cosa è successo a le proprietà nel debugger di Xcode 6.3 beta rimangono comunque un mistero. Non sto aggiungendo questo come una risposta alla mia stessa domanda, perché mentre è funziona potrebbe non essere necessariamente la risposta . Sono troppo nuovo per Swift per sapere quale potrebbe essere la risposta effettiva, o anche se ce n'è una.

+4

Qual è il problema attuale? Quali risultati ti aspetti? La versione 6.3 non funziona come previsto? Se è così, possiamo rimuovere tutte le cose su Xcode 6.2 e rendere questa domanda più focalizzata con una spiegazione migliore di ciò che il problema è in realtà? – nhgrif

+0

Modificato. È possibile evidenziare punti deboli senza ottenere [passive-] aggressivo nhgrif, stiamo solo cercando di andare d'accordo qui. MJB. –

+3

Non sono passivo-aggressivo. Sottolineo le preoccupazioni. La tua domanda non è chiara. Ho votato per chiuderlo in quanto tale. La tua domanda riguarda la versione Xcode 6.3, corretta? Quindi ritaglia tutto il materiale Xcode 6.2. E 'rilevante solo per dire "Questo ha funzionato in 6.2, ma ora non funziona in 6.3". Quindi, chiarisci di più il tuo problema esatto. L'oggetto viene semplicemente interpretato erroneamente dal debugger (ma è ancora possibile utilizzarlo correttamente)? O stanno ottenendo il tipo di oggetto errato restituito dal metodo? – nhgrif

risposta

2

NSData è un incapsulamento dei byte di dati non elaborati, prima che sia tradotto in una stringa o analizzato come JSON.

Se volete vedere che cosa questo dati contiene, quindi è possibile utilizzare NSJSONSerialization (let jsonDictionary = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil))

e poi leggere il dizionario come qualsiasi altro: let value = jsonDictionary["key"]

Spero che sia utile.

Problemi correlati