Domanda

Sono stato in precedenza usando initWithContentsOfURL per scaricare un plist in un NSDictionary, ma questo si blocca l'interfaccia utente quando viene eseguito sullo stesso thread così ora mi sono trasferito a NSURLConnection il problema è che non riesco più a chiamare un metodo per inizializzare il NSDictionary con NSMutableData. Qual è il modo migliore per prendere NSMutableData e metterlo in un NSDictionary?

È stato utile?

Soluzione

Quello che vi serve è NSPropertyListSerialization:

NSDictionary *myDict = [NSPropertyListSerialization propertyListFromData:myData mutabilityOption:NSPropertyListImmutable format:nil errorDescription:nil];

è l'opzione più semplice.

Altri suggerimenti

Senza sapere esattamente cosa si sta cercando di fare, ho intenzione di prendere una pugnalata a questo; anche se non funziona, sono sicuro che è possibile adattarlo alle proprie esigenze.

NSString *s = [[NSString alloc] initWithBytes:[mutableData bytes] length:[mutableData length] encoding:NSUTF8StringEncoding];
NSString *path = NSTemporaryDirectory();
path = [path stringByAppendingPathComponent:@"tmpfile.txt"];
if ([s writeToFile:path atomically:NO encoding:NSUTF8StringEncoding error:nil]) {
    NSDictionary *d = [[NSDictionary alloc] initWithContentsOfFile:path];
}

In parole povere, creare una stringa in base ai dati forniti, scrivere che in un file temporaneo, e quindi caricare il file temporaneo in un oggetto NSDictionary.

Questo codice è ben lungi dall'essere perfetto (ha bisogno di cose come il controllo degli errori, ecc), ma si può iniziare.

Caveat: ho scritto il software di cacao per diversi anni, ma non ho mai toccato un iPhone, in modo che è una supposizione

.

Il tuo NSDictionary ha altri dati che è necessario per preservare?

Nel collegamento: didReceiveResponse: il metodo (delegato del NSURLConnection), è possibile copiare il vecchio NSDictionary in un NSMutableDictionary e quindi inserire i dati di risposta URL in esso pure. Poi convertire il NSMutableDictionary in un nuovo NSDictionary.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top