2010-12-12 33 views
0

que je fais:NSKeyedUnarchiver: iPhone .v. Simulator

NSString *current_path = [[NSBundle mainBundle] bundlePath]; 

NSString *string_path = [NSString stringWithFormat: 
            @"%@/filedstring", current_path]; 

my_string_ = [[NSKeyedUnarchiver unarchiveObjectWithFile:string_path] retain]; 

La chaîne archivée est le texte d'un UITextField que nous UnArchive ici. J'ai essayé avec et sans current_path.

Tout cela fonctionne très bien lors de l'exécution dans le simulateur (membre de la classe NSString *my_string_ est non nul), mais lorsqu'il est exécuté sur mon iPhone my_string_ est nul.

Pourquoi est-ce?


Merci pour les réponses rapides tous.

Ajoutant à la réponse de Jason Coco, archive et décompressez ici:

NSString *library_path = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, 
             NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *username_path = [library_path 
          stringByAppendingPathComponent:@"Caches/filedstring"]; 
+0

Astuce: lorsque vous générez des chemins à l'aide de 'NSString', utilisez la méthode' stringByAppendingPathComponent: '. Voir: http://bit.ly/fRKJZL –

+0

"Objective-C, iPhone, NSKeyedUnarchiver" n'est pas un titre très descriptif. – vikingosegundo

+0

@vikingosegundo: Pouvez-vous recommander un titre qui serait plus descriptif s'il vous plaît? @ShaggyFrog: Oui, bien sûr. – SK9

Répondre

4

Vous ne pouvez pas écrire dans l'ensemble principal du téléphone, ce n'est pas autorisé. C'est pourquoi vous ne trouvez pas vos archives plus tard. Le simulateur, puisqu'il fonctionne réellement sur Mac OS X, ne fonctionne pas de cette façon, il écrira donc le fichier.

Si vous avez besoin d'écrire quelque chose, vous devez utiliser l'un des chemins accessibles en écriture disponibles pour votre application. Pour plus d'informations, voir le iOS Application Programming Guide/The File System. Si vous allez faire iOS Application Development, vous devez absolument lire et comprendre tout ce document.

+0

Bingo. Je vous remercie. Et vous avez raison de lire tous les documents, j'apprends et je lis au fur et à mesure. Je suis à temps partiel. Les docs ont aussi plus de sens pour moi, plus j'ai d'expérience. – SK9

0

Comme dit @middaparka, il y a probablement quelque chose de mal avec ce fichier. Voici comment je déboguer ce problème:

Première étape,

[[NSFileManager defaultManager] fileExistsAtPath: string_path]; 

Deuxième étape,

NSError *err; 
NSString *tmp = [NSString stringWithContentsOfFile:string_path encoding:NSUTF8StringEncoding error:&err]; 
NSLog(@"Contents of string %@",tmp); 

Une fois que vous avez fait ceux-ci, vous devriez avoir une idée beaucoup plus claire pourquoi votre NSKeyedUnarchiver est échouer. Consultez également la méthode stringByAppendingPathComponent de NSString.