2015-10-28 2 views
0

Voici le code ci-dessous. Il télécharge une image miniature et essaie ensuite de créer une image basée sur le chemin du fichier miniature. Mais il me donne l'erreur EXC_BAD_ACCESS à l'appel de la méthode "imageWithContentsOfFile". Alors que EXC_BAD_ACCESS adresse le code essayant d'accéder à un objet qui a été libéré, je ne sais probablement pas quel objet il pourrait être. Toute aide serait appréciée!iOS [UIImage imageWithContentsOfFile: filePath] Problème EXC_BAD_ACCESS

NSBlockOperation *completionOperation = [NSBlockOperation blockOperationWithBlock:^{ 
      if([[NSFileManager defaultManager] fileExistsAtPath:operation.destinationPath ]){ 

       NSString *key = [[MEURLCacheKeyRegister sharedRegister] cacheKeyForURL:operation.fileUrl]; 

       UIImage *image = [UIImage imageWithContentsOfFile:operation.destinationPath]; 
      }else{ 
       DDLogDebug(@"Thumbnail file doesn't exist at %@", operation.destinationPath); 
      } 
     } 

    }]; 

AFDownloadRequestOperation *requestOperation = [FileServerDownloadUtils downloadOperationForURL:operation.fileUrl 
                         destinationPath:operation.destinationPath 
                          completion:completionOperation]; 
[self.fileSyncQueue addOperation:requestOperation]; 
+0

Quelle ligne elle plante et que faites-vous avec la variable 'image' après le chargement dans le bloc d'achèvement? – Abhinav

+0

Salut Abhinav, il s'est écrasé à la ligne UIImage * image = [UIImage imageWithContentsOfFile: operation.destinationPath]; – user744641

+0

opération est un objet NSOperation personnalisé BTW. – user744641

Répondre

0

EXC_BAD_ACCESS indique que l'objet a été libéré lors de son accès.

Si je vous, je voudrais essayer les choses suivantes:

  1. Enregistrez le fichier avec .jpg et non .jpg.prv.jpg l'extension.
  2. Essayez d'utiliser initWithContentsOfFile au lieu de imageWithContentsOfFile comme imageWithContentsOfFile autoreleases image qui dans les cas de bords rares crée des accidents comme celui-ci.
  3. Lors du passage du code à block, accédez aux propriétés de l'objet en faisant référence à self. Quelque chose comme ceci: __weak MyController *weakSelf = self. Utilisez ensuite weakSelf pour accéder aux propriétés à l'intérieur du bloc.

Ce ne sont que quelques indices qui peuvent vous aider à creuser plus loin. Vous pouvez utiliser NSZombie et d'autres outils de profilage pour le clouer.