0%

Fatal Exception: NSObjectInaccessibleException(This application is not allowed to access Photo data)

PHImageManager 在初始化的时候添加了 DISPATCH_SOURCE_TYPE_MEMORYPRESSURE dispatch source event,当内存不够的时候会尝试移除缓存。并且 PHImageManager 是一个懒加载的对象

这就意味着当回调发生的时候,你如果曾经调用过 -[PHImageManager defaultManager] 隐式初始化,而且没获得相册权限,就会导致 crash。

Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Fatal Exception: NSObjectInaccessibleException
0 CoreFoundation 0x181542e38 __exceptionPreprocess
1 libobjc.A.dylib 0x180ba7f80 objc_exception_throw
2 PhotoLibraryServices 0x18a7528b0 -[PLPhotoLibrary initWithTransientContext:name:]
3 Photos 0x18b25e798 __30-[PHPhotoLibrary photoLibrary]_block_invoke
4 libdispatch.dylib 0x180f8d47c _dispatch_client_callout
5 libdispatch.dylib 0x180f8e2c0 dispatch_once_f
6 Photos 0x18b25e754 -[PHPhotoLibrary photoLibrary]
7 Photos 0x18b235614 -[PHCoreImageManager _cancelAndFlushPreheatItemsForAssets:CPLPrefetching:domain:operation:passingTestHandler:didCancelHandler:]
8 Photos 0x18b24d570 __22-[PHImageManager init]_block_invoke
9 AssetsLibraryServices 0x18a16c7d8 __pl_dispatch_source_set_event_handler_block_invoke
10 libdispatch.dylib 0x180f8d47c _dispatch_client_callout
11 libdispatch.dylib 0x180fa4090 _dispatch_source_latch_and_call
12 libdispatch.dylib 0x180f8f970 _dispatch_source_invoke
13 libdispatch.dylib 0x180f9b390 _dispatch_root_queue_drain
14 libdispatch.dylib 0x180f9b0b0 _dispatch_worker_thread3
15 libsystem_pthread.dylib 0x1811a5470 _pthread_wqthread
16 libsystem_pthread.dylib 0x1811a5020 start_wqthread

Fatal Exception: NSObjectInaccessibleException

This application is not allowed to access Photo data.