0
votes

Économiser et visualiser des fichiers dans iOS

Je reçois le contenu du fichier codé de base64 à partir du serveur. Ensuite, j'écris des données dans le fichier. J'ai vérifié que ce fichier n'est pas vide après cela, cela signifie que les données ont été écrites avec succès dans le fichier. Mais quand j'essaie de présenter ce fichier, tout ce que je reçois est une vue vide. Alors qu'est-ce que je fais mal? Entrez la description de l'image ici

[f getFile:^(NSString * _Nonnull string) {
                NSString *docsDir;
                NSArray *dirPaths;
                NSData *content = [string dataUsingEncoding:NSUTF8StringEncoding];
                dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                docsDir = [dirPaths objectAtIndex:0];
                NSString *databasePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"hill.jpg"]];
               [content writeToFile:databasePath atomically:YES];
                if ([[NSFileManager defaultManager] fileExistsAtPath:databasePath]){
                 NSURL *url = [NSURL fileURLWithPath:databasePath];
                UIDocumentInteractionController *documentInteractionController =[UIDocumentInteractionController interactionControllerWithURL:url];
                 documentInteractionController.delegate = self;
                 [documentInteractionController presentPreviewAnimated:YES];
                }
        } Error:^(NSString * _Nonnull errorMessage) {

      }];


0 commentaires

3 Réponses :


0
votes

Édition de votre code de code, essayez-le

[f getFile:^(NSString * _Nonnull string) {
                NSString *docsDir;
                NSArray *dirPaths;
                NSData *content = [[NSData alloc] initWithBase64EncodedString: string options:0];
                dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                docsDir = [dirPaths objectAtIndex:0];
                NSString *databasePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"hill.jpg"]];
               [content writeToFile:databasePath atomically:YES];
                if ([[NSFileManager defaultManager] fileExistsAtPath:databasePath]){
                 NSURL *url = [NSURL fileURLWithPath:databasePath];
                UIDocumentInteractionController *documentInteractionController =[UIDocumentInteractionController interactionControllerWithURL:url];
                 documentInteractionController.delegate = self;
                 [documentInteractionController presentPreviewAnimated:YES];
                }
        } Error:^(NSString * _Nonnull errorMessage) {

      }];


0 commentaires

0
votes

à partir de votre code, je vois que vous enregistrez une chaîne dans un fichier image (Hill.jpg). Le uidocumentinterActionController Lisez la base de fichier sur leur extension, ils ne peuvent donc pas lire ce fichier. Je pense que si vous modifiez votre nom de fichier en Hill.txt, votre code pourrait fonctionner. J'espère que cela aide.


0 commentaires

0
votes

Comme vous le dites, le contenu gère du serveur est de base64-codote, vous devez donc le décoder.

NSData *imageContent = [[NSData alloc] initWithBase64EncodedString:string options:kNilOptions];
if (imageContent) {
    // save to file
}


0 commentaires