J'essaie de diffuser une liste de propriétés des résultats de recherche dans mon application iPhone. Le serveur est un prototype, écrit en Python.Essayer d'écrire au format binaire plist à partir de Python (w/PyObjC) pour être récupéré et lu par Cocoa Touch
D'abord, j'ai trouvé le plistlib intégré de Python, qui est génial. Je veux donner un coup-de-recherche-comme-un-coup, donc j'ai besoin qu'il soit aussi petit que possible, et xml était trop grand. Le format de plist binaire semble être un bon choix. Malheureusement, plistlib ne fait pas de fichiers binaires, alors passez directement à PyObjC.
(Segue: Je suis très ouvert à toute autre idée sur la façon d'effectuer une recherche en direct.J'ai déjà réduit les données autant que possible, y compris afficher uniquement des résultats suffisants pour remplir la fenêtre avec le clavier de l'iPhone, est 5.)
Malheureusement, bien que je connaisse Python et que je devienne plutôt correct avec Cocoa, je n'ai toujours pas PyObjC.
Ceci est l'équivalent de cacao de ce que je veux faire:
NSArray *plist = [NSArray arrayWithContentsOfFile:read_path];
NSError *err;
NSData *data = [NSPropertyListSerialization dataWithPropertyList:plist
format:NSPropertyListBinaryFormat_v1_0
options:0 // docs say this must be 0, go figure
error:&err];
[data writeToFile:write_path atomically:YES];
Je pensais que je devrais être en mesure de faire quelque chose comme ça, mais dataWithPropertyList est pas dans les objets NSPropertyListSerialization liste dir(). Je devrais probablement convertir la liste en NSArray. J'ai essayé les docs de PyObjC, mais c'est tellement tangentiel à mon vrai travail que j'ai pensé que j'essaierais un SO SOS, aussi.
from Cocoa import NSArray, NSData, NSPropertyListSerialization, NSPropertyListBinaryFormat_v1_0
plist = [dict(key1='val', key2='val2'), dict(key1='val', key2='val2')]
NSPropertyListSerialization.dataWithPropertyList_format_options_error(plist,
NSPropertyListBinaryFormat_v1_0,
?,
?)
C'est ainsi que je lis dans le plist du côté de l'iPhone.
NSData *data = [NSData dataWithContentsOfURL:url];
NSPropertyListFormat format;
NSString *err;
id it = [NSPropertyListSerialization
propertyListFromData:data
mutabilityOption:0
format:&format
errorDescription:&err];
Heureux de préciser si cela n'a aucun sens.
Peut -writeToFile: atomiquement utiliser le binaire format de plist? Et je ne veux pas vraiment l'écrire sur un disque, j'ai besoin de l'imprimer pour la réponse HTTP. – zekel
@zekel: format XML (sauf si la variable d'environnement 'NSWriteOldStylePropertyLists' est définie). – kennytm
il ne semble pas que NSWriteOldStylePropertyLists soit la même chose que le format binaire. C'est "Spécifie si la sortie de liste de propriétés de texte doit être au format MacOS-X par défaut (XML), ou au format OpenStep original plus lisible par l'homme (mais moins puissant)." – zekel