2010-10-28 16 views
1

J'ai un NSString qui contient déjà une pList.Objective-C arrayWithPlist (qui est déjà dans un NSString)

Comment puis-je le transformer en NSArray? (SANS l'enregistrer sur le disque, uniquement pour le recharger avec arrayWithContentsOfFile, puis le supprimer.)

Où est la méthode make arrayWithPlist ou arrayWithString? (Ou comment pourrais-je faire mon propre?)

NSArray *anArray = [NSArray arrayWithPlist:myPlistString]; 
+0

Ce qui fonctionne pour certaines personnes ... ne fonctionne pas pour les autres. Les autres réponses sont "50%" correct. D'autres ont 5 bonnes réponses. Désolé ... Je suis seulement ici pour obtenir de l'aide ... et pour donner de l'aide. Je ne veux pas jouer au "qui a raison, qui a tort". – Patricia

+0

Est-ce que quelqu'un sait comment je peux bloquer vikingosegundo alors aucune de ses "réponses" inutiles n'apparaissent sur mon écran? – Patricia

+0

Est-ce que quelqu'un sait pourquoi Patricia est si fâchée? – vikingosegundo

Répondre

5

Vous voulez utiliser NSPropertyListSerialization:

NSData *data = [plistString dataUsingEncoding:NSUTF8StringEncoding]; 
NSError *error = nil; 
NSArray *plist = [NSPropertyListSerialization 
        propertyListWithData:plistData 
        options:/*unused*/0 
        format:NULL 
        error:&error]; 
if (!plist) { 
    NSLog(@"%s: Failed to create plist: %@", 
      __func__, error ?: @"(unknown error)"); 
} 

Cette méthode particulière a été introduite avec iOS 4.0/Mac OS X 10.6. Avant ces versions, vous utiliseriez:

NSData *data = [plistString dataUsingEncoding:NSUTF8StringEncoding]; 
NSString *errorText = nil; 
NSArray *plist = [NSPropertyListSerialization 
        propertyListFromData:plistData 
        mutabilityOption:NSPropertyListImmutable 
        format:NULL 
        errorDescription:&errorText]; 
if (!plist) { 
    NSLog(@"%s: Failed to create plist: %@", 
      __func__, errorText ?: @"(unknown error)"); 

    /* Part of the reason this method was replaced: 
    * It is the caller's responsibility to release the error description 
    * if any is returned. This is completely counter-intuitive. 
    */ 
    [errorText release], errorText = nil; 
} 
+0

Je vais essayer. Je suppose que la grande question est: comment aurais-je compris tout seul? Je n'aurais jamais pensé à regarder au fond de NSPropertyListSerialization pour cette solution. – Patricia

+0

Vous voulez faire quelque chose avec des listes de propriétés. Ainsi, dans la fenêtre de documentation de Xcode, vous commencerez à taper "propriété". Ensuite, vous pourriez trouver cette classe, ou vous trouverez et lisez le [Property List Programming Guide] d'Apple (http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/PropertyLists/Introduction/Introduction.html) . La documentation d'Apple est vraiment très bonne, et ils fournissent aussi beaucoup de code et de projets. –

+1

Les docs m'ont toujours été inutiles. J'aurais cherché NSARRAY (pas la propriété). Mais d'une façon ou d'une autre ... J'obtiendrais des centaines de matchs et je passerais environ une heure à les lire ... et aucun d'entre eux ne répondrait à ma question. – Patricia