longitachi / ZLPhotoBrowser

Wechat-like image picker. Support select photos, videos, gif and livePhoto. Support edit image and crop video. 微信样式的图片选择器,支持预览/相册内拍照及录视频、拖拽/滑动选择,编辑图片/视频,支持多语言国际化等功能;
MIT License
4.77k stars 969 forks source link

设置最大只能选择一张, 然后点击原图,在重复点击原图,就崩溃了 #722

Closed xiaoyao20084321 closed 2 years ago

xiaoyao20084321 commented 2 years ago

Issue Description

Description and Steps

设置最大只能选择一张, 然后点击原图,在重复点击原图,就崩溃了,xcode给出的崩溃原因是因为数组越界

Info

ZLPhotoBrowser version: e.g. 4.3.1 Device: e.g. iPhone X Device version: e.g. iOS 13.5 Xcode version: e.g. Xcode 13.3.1

Configuration code of ZLPhotoConfiguration

   ZLPhotoConfiguration.default().maxSelectCount = 1
   let ps = ZLPhotoPreviewSheet()
   ps.selectImageBlock = { [weak self] (images, assets, isOriginal) in
        // your code
   }
   ps.showPreview(animate: true, sender: self)
longitachi commented 2 years ago

ZLPhotoConfiguration配置代码就这一行吗?就这一行的话,只能在预览大图界面点击原图按钮,我试了下重复点击没有崩溃。能否上传下堆栈信息

xiaoyao20084321 commented 2 years ago

ZLPhotoConfiguration配置代码就这一行吗?就这一行的话,只能在预览大图界面点击原图按钮,我试了下重复点击没有崩溃。能否上传下堆栈信息

是的,只有这一行代码 image

xiaoyao20084321 commented 2 years ago

Last Exception Backtrace: 0 CoreFoundation 0x187720300 exceptionPreprocess + 228 1 libobjc.A.dylib 0x187434c1c objc_exception_throw + 59 2 CoreFoundation 0x1877795a8 _CFThrowFormattedException + 115 3 CoreFoundation 0x187604710 -[__NSArrayM objectAtIndexedSubscript:] + 187 4 UICollectionView_ARDynamicHeightLayoutCell 0x102bd09e4 0x102bc8000 + 35300 5 CoreFoundation 0x1876f267c NSARRAY_IS_CALLING_OUT_TO_A_BLOCK + 23 6 CoreFoundation 0x1876f2cb4 NSArrayEnumerate + 411 7 UICollectionView_ARDynamicHeightLayoutCell 0x102bd091c 0x102bc8000 + 35100 8 ZLPhotoBrowser 0x106e518d4 0x106d00000 + 1382612 9 ZLPhotoBrowser 0x106e472d8 0x106d00000 + 1340120 10 ZLPhotoBrowser 0x106e4795c 0x106d00000 + 1341788 11 UIKitCore 0x18b86a6c0 -[UIApplication sendAction:to:from:forEvent:] + 99 12 UIKitCore 0x18b252b30 -[UIControl sendAction:to:forEvent:] + 207 13 UIKitCore 0x18b252e98 -[UIControl _sendActionsForEvents:withEvent:] + 399 14 UIKitCore 0x18b251eb0 -[UIControl touchesEnded:withEvent:] + 519 15 UIKitCore 0x18b8a5b08 -[UIWindow _sendTouchesForEvent:] + 1023 16 UIKitCore 0x18b8a72f0 -[UIWindow sendEvent:] + 3547 17 UIKitCore 0x18b88245c -[UIApplication sendEvent:] + 347 18 UIKitCore 0x18b905a54 dispatchPreprocessedEventFromEventQueue + 6687 19 UIKitCore 0x18b908648 handleEventQueueInternal + 5367 20 UIKitCore 0x18b900578 handleHIDEventFetcherDrain + 143 21 CoreFoundation 0x18769baf4 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORMFUNCTION + 27 22 CoreFoundation 0x18769ba48 CFRunLoopDoSource0 + 83 23 CoreFoundation 0x18769b198 CFRunLoopDoSources0 + 195 24 CoreFoundation 0x187695f38 CFRunLoopRun + 795 25 CoreFoundation 0x1876958f4 CFRunLoopRunSpecific + 479 26 GraphicsServices 0x191aac604 GSEventRunModal + 163 27 UIKitCore 0x18b869358 UIApplicationMain + 1943 28 libswiftUIKit.dylib 0x1be2a5e7c UIApplicationMain+ 32380 (:::_:) + 171 29 UWT 0x102a10218 0x1029e8000 + 164376 30 UWT 0x102a101a0 0x1029e8000 + 164256 31 UWT 0x102a102cc 0x1029e8000 + 164556 32 libdyld.dylib 0x1875112dc start + 3

longitachi commented 2 years ago

你可以下载demo试一下,是否会出现你描述的问题,有的话我这边在调试找下问题。 如果没有的话。可以看下是不是和你项目中的某些框架有一些runtime修改了底层逻辑导致的。

UICollectionView_ARDynamicHeightLayoutCell 0x102bd091c 0x102bc8000 + 35100
xiaoyao20084321 commented 2 years ago

我把我项目中的这个框架移除了,还真不会崩溃了,看来就是和runtime有关。 现在有另外一个问题就是,同样设置最大只能选择1个,此时 1、点击打开相册进入缩略图列表 2、随便点击一个缩略图进入大图预览 3、选中原图按钮 4、此时不点击确定按钮,点击左上角的返回按钮,返回到缩略图列表中 5、此时会发现除了一开始点击的缩略图之外,其余所有的缩略图都变灰并且不可点击了。

这个逻辑对嘛。。我以为的逻辑是,我点击一个缩略图进入预览后,选中原图后, 我又不想选这个图了,我返回后,应该可以点击其他的缩略图,并且这个缩略图已经是处于原图的模式。

longitachi commented 2 years ago

现在点击原图这个逻辑,我是按照微信的来做的。 你说的这种情况,可以将showSelectBtnWhenSingleSelect这个参数设置为true。单选时候会显示右上角选择按钮,从而在缩略图界面进行修改选择