Ich habe zuvor initWithContentsOfURL verwendet, um eine PLIST in ein NSDictionary zu downloaden, aber dies hängt die Benutzeroberfläche, wenn auf dem gleichen Thread ausgeführt, so dass ich jetzt zu NSURLConnection verschoben habe das Problem ist, dass ich eine Methode nicht mehr init aufrufen kann das NSDictionary mit NSMutableData. Was ist der beste Weg, um NSMutableData in ein NSDictionary zu übertragen?NSDictionary Von NSMutableData
Antwort
Was Sie brauchen, ist NSPropertyListSerialization:
NSDictionary *myDict = [NSPropertyListSerialization propertyListFromData:myData mutabilityOption:NSPropertyListImmutable format:nil errorDescription:nil];
Ist die einfachste Option.
Ohne genau zu wissen, was Sie zu tun versuchen, werde ich einen Stich machen; auch wenn es nicht funktioniert, bin ich sicher, dass Sie es für Ihre Zwecke anpassen können.
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];
}
Im Klartext, eine Zeichenfolge aus den gegebenen Daten erstellen, daß, um eine temporäre Datei schreiben und dann in ein Objekt NSDictionary
die temporäre Datei laden.
Dieser Code ist bei weitem nicht perfekt (braucht Dinge wie Fehlerprüfung, etc.), aber es kann Ihnen den Anfang machen.
Caveat: Ich habe seit mehreren Jahren Cocoa-Software geschrieben, aber ich habe ein iPhone nie berühren, so dass eine Vermutung ist.
Hat Ihr NSDictionary andere Daten, die Sie aufbewahren müssen?
In der Verbindung: didReceiveResponse: method (Delegat von NSUrlConnection) können Sie Ihr altes NSDictionary in ein NSMutableDictionary kopieren und dann auch die URL-Antwortdaten einfügen. Konvertieren Sie dann das NSMutableDictionary in ein neues NSDictionary.