2015-02-26 2 views
1

J'ai une application qui enregistre des images (fichiers JPEG) et des fichiers texte dans le répertoire de documents de l'application. Je l'ai testé dans le simulateur xcode et sur deux iPhones (4 et 5, exécutant ios 7.1 et 8.1 respectivement), et il fonctionne exactement comme prévu, et les données sont conservées très bien.Les fichiers enregistrés dans <répertoire_accueil>/Les documents sont perdus après une courte période de temps

Cependant, après l'avoir soumis à l'app store, un utilisateur testant l'application (utilisant iphone 6, ios 8.1) a constaté que les données sauvegardées sont perdues toutes les 20 minutes environ. Est-ce que quelqu'un sait pourquoi c'est et comment je peux résoudre le problème?

Le marquage des fichiers comme Do Not Backup résoudrait-il le problème?

Pour référence, les données enregistrées dans NSUserDefaults sont conservées.

Merci d'avance.

EDIT ----

Je l'ai dit que je suis à la recherche pour le répertoire des documents en utilisant:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                NSUserDomainMask, YES); 
self.docsPath = [paths objectAtIndex:0]; 

Je suis alors self.docsPath la AJOUT DE chaîne attribuée à l'image/fichier, XXXX.jpg:

self.imgPath = [self.fileName stringByAppendingString:@".jpg"]; 
self.tempPhotoPath = [self.docsPath stringByAppendingPathComponent:self.imgPath]; 

Je tiens également à préciser que les fonctions d'application normalement sur l'iPhone 4/5, débranché de Xcode et exécutant des versions appstore téléchargés de l'application. Jusqu'à présent, dans l'enquête, c'est précisément l'iPhone 6 que j'ai des problèmes, et de ce que je peux dire, il est tout simplement effacer le répertoire de documents toutes les 20 minutes ou plus.

+0

Enregistrez-vous le chemin d'accès complet au fichier ou aux chemins d'accès relatifs? Dans iOS 8, le chemin vers le répertoire de documents peut changer, au moins l'UDID de l'application dans le chemin peut changer. Juste ne sauvez pas le chemin amusant et ça devrait aller. – rckoenes

+0

Je suis en train d'enregistrer le chemin de fichier relatif, donc j'enregistre XXXX.jpg, puis je sauvegarde l'image en cherchant le répertoire de documents et en ajoutant le "chemin" avec XXXX.jpg. –

+0

Publiez votre code, peut-être qu'il y a quelque chose qui ne va pas, maintenant c'est juste deviner le travail. – rckoenes

Répondre

4

dans les nouveaux documents Apple, chaque fois que l'application se lance à chaque fois qu'elle génère un nouvel ID sandbox. Donc, si vous avez enregistré l'image avec le chemin d'accès complet, elle risque d'être perdue lors du lancement de la deuxième application. Il ne montrera pas cet effet si vous testez sur un simulateur ou un appareil connecté à xcode. Il suffit de brancher et de lancer votre application, vous pouvez également voir ce problème. Donc, au lieu de sauvegarder l'image avec son chemin, il suffit de créer un dossier dans le répertoire du document et de sauvegarder votre image là-bas. Pour générer le chemin, vous pouvez écrire le code ci-dessous: (Mais assurez-vous de sauvegarder l'image avec un identifiant spécifique, comme imageID, puis récupérez la même image à partir de cet imageID).

- (NSString *)documentsPathForFileName:(NSString *)name folder:(NSString*)folderName{ 
    return [[self pathToPatientPhotoFolder:folderName] stringByAppendingPathComponent:name]; 
} 

- (NSString *)pathToPatientPhotoFolder:(NSString *)folderName { 
    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                     NSUserDomainMask, 
                     YES) lastObject]; 
    NSString *patientPhotoFolder = [documentsDirectory stringByAppendingPathComponent:folderName]; 

    // Create the folder if necessary 
    BOOL isDir = NO; 
    NSFileManager *fileManager = [[NSFileManager alloc] init]; 
    if (![fileManager fileExistsAtPath:patientPhotoFolder 
          isDirectory:&isDir] && isDir == NO) { 
     [fileManager createDirectoryAtPath:patientPhotoFolder 
       withIntermediateDirectories:NO 
           attributes:nil 
            error:nil]; 
    } 
    return patientPhotoFolder; 
} 

NSURL *urla = [NSURL URLWithString:[NSString stringWithFormat:@"%@",[self.imagearray objectAtIndex:indexPath.item]]];// imagearray for array of image url from server 
NSString *thumbnailCacheKey = [NSString stringWithFormat:@"thumb-%@",[self.imageIDarray objectAtIndex:indexPath.item]];//first try to check thumb-<my image id> is exist or not. 
UIImage *image = [UIImage imageWithContentsOfFile:[self documentsPathForFileName:thumbnailCacheKey folder:@"thumb"]];//this will check thumb-<my image id> in ur sandbox 
if (!image){ 
    UIImage *imageToSave = // 
    NSString *stringPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"thumb"]; 
     // New Folder is your folder name 
    NSError *error = nil; 
     if (![[NSFileManager defaultManager] fileExistsAtPath:stringPath]) 
      [[NSFileManager defaultManager] createDirectoryAtPath:stringPath withIntermediateDirectories:NO attributes:nil error:&error];       
    NSString *filePath = [stringPath stringByAppendingPathComponent:thumbnailCacheKey]; 
     NSData *pngData = UIImageJPEGRepresentation(image, 0.8); 
     [pngData writeToFile:filePath atomically:YES]; 
} 
else{ 
    yourimageView.image = image; 
}