2014-02-04 3 views
3

Я разрабатываю галерею изображений, которая позволяет выбирать некоторые изображения с iPhone и отображать их.ALAsset pointer throw EXC_BAD_ACCESS при доступе к нему

Некоторые пояснения об этой галереи:

  • UITableView отображает различные каталоги, содержащие изображения картинки
  • Когда пользователь нажимает на одну из этих каталогов: отображение в UICollectionView с различными картинами из выбранного каталога
  • Обратно, чтобы вернуться к UITableView
  • Следующая кнопка для отображения выбранных изображений на новой странице.

Как реализуется эта галерея:

  • Для каждого найденных каталогов в iPhone фотографии, хранить ALAssetsGroup в качестве NSMutableArray имени directoriesData
  • Показать каталоги хранятся в directoriesData в UITableView.
  • Когда пользователь выбирает один каталог: храните каждый из ALAsset, содержащийся в этом каталоге, в файлес именем picturesData.
  • Показать миниатюры в формате UICollectionView от picturesData.
  • Когда пользователь выбирает изображение, он сохраняется в одном экземпляре NSMutableArray с именем wishPictures.
  • Если пользователь нажмет на кнопку «Назад», я удаляю все объекты из изображенийData перед отображением UITableView.

Теперь проблема:

У меня есть две различные каталоги фотографий в моем iPhone.

Каталог Каталог B

Я хочу, чтобы выбрать одну фотографию в каталоге A и один другой в каталоге B.

После выбора их, я нажимаю на следующей странице, чтобы отобразить их.

Новая страница загружает изображения из требуемых изображений. Но когда я хочу отобразить выбранные изображения, обратившись к ALAsset Справочника А, у меня есть EXC_BAD_ACCESS.

После некоторых испытаний и исследований в моем проекте я обнаружил, что если я не удалю объекты из изображенийData (когда я нажимаю кнопку назад), у меня больше нет EXC_BAD_ACCESS.

Но, мне нужно очистить содержимое изображений, потому что, когда я заполняю свой UICollectionView, это из изображений. И в случае доступа к каталогу A, а затем в каталог B, у меня будет содержимое двух каталогов в UICollectionView.

Так как я могу сохранить ALAsset указатель правильный и чистый pictureData?

Надеюсь, вы понимаете мой проект и проблему.

Спасибо!

http://img11.hostingpics.net/pics/581536photo.jpg

Редактировать:

Backtrace

* нить # 29: TID = 0x599a6, 0x39764b26 libobjc.A.dylib objc_msgSend + 6, queue = 'com.apple.root.high-priority, stop reason = EXC_BAD_ACCESS (code=1, address=0xc)
frame #0: 0x39764b26 libobjc.A.dylib
objc_msgSend + 6
кадр # 1: 0x00195f1a MyProject -[Picture getFullImage](self=0x176ebb40, _cmd=0x005de393) + 310 at Picture.m:211
frame #2: 0x001959bc MyProject
- [Picture getCroppedImage] (self = 0x176ebb40, _cmd = 0x005da2b4) + 68 at Picture.m: 154
frame # 3: 0x001f9a82 MyProject __68-[ImageCropViewController sliderContentsAddContent:ToSlider:AtPage:]_block_invoke(.block_descriptor=0x17637000) + 50 at ImageCropViewController.m:1020
frame #4: 0x39c4cd1a libdispatch.dylib
_dispatch_call_block_and_release + 10
кадр # 5: 0x39c53d70 libdispatch.dylib _dispatch_root_queue_drain + 220
frame #6: 0x39c53f58 libdispatch.dylib
_dispatch_worker_thread2 + 56
кадр # 7: 0x39d8edbe libsystem_pthread.dylib`_pthread_wqthread + 298

+0

Что? вы сохраняете все изображения в NSMutableArray? – Ajay

+0

Когда пользователь выбирает каталог на первой странице, я сохраняю все ALAsset (изображение) выбранного каталога в NSMutableArray. И я использую этот NSMutableArray для заполнения UICollectionView. –

+1

Показать сообщение об исключении и полную трассировку стека. – Wain

ответ

0

компания Apple предоставила чистый способ сделать то, что вы пытаетесь достичь.

Вот пример кода: MyImagePicker

и попытаться проанализировать код и посмотреть, что они делают.!

+0

Спасибо за ответ. В MyImagePicker разработчики также используют NSMutableArray для хранения каталогов и изображений для требуемых каталогов. Я делаю то же самое в своем проекте. –

+0

Но вы должны хранить только URL-адрес Asset, а не весь образ. В противном случае вы скоро получите предупреждение о памяти. !! – Ajay

+0

Когда вы говорите об «URL-адресе актива», вы говорите о целом объекте ALAsset или myALAssetObject.defaultRepresentation.url? –

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