2015-10-28 3 views
0

Вот этот код. Он загружает уменьшенное изображение, а затем пытается создать изображение на основе пути к файлу эскиза. Но это дает мне ошибку EXC_BAD_ACCESS при вызове метода «imageWithContentsOfFile». В то время как EXC_BAD_ACCESS обращается к коду, пытающемуся получить доступ к выпущенному объекту, скорее всего, я не знаю, какой объект он может быть. Любая помощь будет оценена!iOS [UIImage imageWithContentsOfFile: filePath] Выпуск 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

Какую строку он сбрасывает и что вы делаете с переменной 'image' после загрузки в блок завершения? – Abhinav

+0

Привет, Абхинав, он разбился по строке UIImage * image = [UIImage imageWithContentsOfFile: operation.destinationPath]; – user744641

+0

Операция - это пользовательский объект NSOperation BTW. – user744641

ответ

0

EXC_BAD_ACCESS указывает, что объект был выпущен при его доступе.

Если бы я тебя, я хотел бы попробовать следующие вещи:

  1. Сохранить файл с .jpg и не .jpg.prv.jpg расширения.
  2. Попробуйте использовать initWithContentsOfFile вместо imageWithContentsOfFile как imageWithContentsOfFile автореализует изображение, которое в случаях редких краев создает такие сбои.
  3. При передаче кода на block свойства объектов доступа, сделав слабую ссылку на self. Что-то вроде этого: __weak MyController *weakSelf = self. Затем используйте weakSelf для доступа к свойствам внутри блока.

Это всего лишь несколько подсказок, которые могут помочь вам копать дальше. Вы можете использовать NSZombie и другие инструменты для профилирования, чтобы прибить его.

Смежные вопросы