1

J'utilise NSData pour conserver une image dans mon application. Je sauve l'image comme si (dans mon délégué App):Sauvegarder des données - fonctionne sur le simulateur, pas sur le périphérique

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    NSLog(@"Saving data"); 

    NSData *data = UIImagePNGRepresentation([[viewController.myViewController myImage]image]); 
    //Write the file out! 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *path_to_file = [documentsDirectory stringByAppendingString:@"lastimage.png"]; 

    [data writeToFile:path_to_file atomically:YES]; 
    NSLog(@"Data saved."); 
} 

et je le charge en arrière comme si (dans mon contrôleur de vue, sous viewDidLoad):

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSString *path_to_file = [documentsDirectory stringByAppendingString:@"lastimage.png"]; 

if([[NSFileManager defaultManager] fileExistsAtPath:path_to_file]) 
{ 
    NSLog(@"Found saved file, loading in image"); 
    NSData *data = [NSData dataWithContentsOfFile:path_to_file]; 

    UIImage *temp = [[UIImage alloc] initWithData:data]; 
    myViewController.myImage.image = temp; 
    NSLog(@"Finished loading in image"); 
} 

Ce code fonctionne à chaque fois sur le simulateur, mais sur l'appareil, il ne peut jamais sembler se recharger dans l'image. Je suis assez sûr que cela sauve, mais je n'ai aucune vue du système de fichiers.

Est-ce que je fais quelque chose de bizarre? Le simulateur a-t-il un moyen différent d'accéder à ses répertoires que l'appareil?

Merci!

+0

Est-ce que cela a quelque chose à voir avec la gestion des droits? – DMan

+0

Quel genre de gestion des droits? Est-ce que le simulateur diffère de l'appareil par une sorte de permission liée? Merci pour votre réponse! –

+0

Eh bien, je ne suis pas un développeur d'iPhone, mais j'ai entendu dire que l'iPhone était assez restrictif ... et votre ligne, «à peu près sûre, ça sauve», n'est-ce pas? Je vois que vous avez un NSLog, mais si ce n'est pas le cas, il devrait retourner une erreur. – DMan

Répondre

4

Aha! J'y suis arrivé!

J'écris ce que quelqu'un d'autre en tirant les cheveux ne restez pas assis là à regarder le code, se demandant pourquoi il ne fonctionne pas :)

La ligne problématique c'est l'un:

NSString *path_to_file = [documentsDirectory stringByAppendingString:@"lastimage.png"]; 

il devrait ressembler à ceci:

NSString *path_to_file = [documentsDirectory stringByAppendingPathComponent:@"lastimage.png"]; 

La raison est, sans elle, vous obtiendrez quelque chose le long des lignes de /Files/Documentslastimage.png au lieu de/fichiers/documents/lastima ge.png, car l'ajout du composant path prend en charge les barres obliques pour vous. J'espère que cela aidera quelqu'un d'autre dans le futur!

Questions connexes