ios – 崩溃CGImageDestinationFinalize

前端之家收集整理的这篇文章主要介绍了ios – 崩溃CGImageDestinationFinalize前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的应用程序允许用户使用照片框架编辑照片.我看到一些崩溃报告,似乎在生成输出图像时发生崩溃,但我不知道问题所在.这种崩溃发生在多个硬件设备和多个版本的iOS 9,包括最新的9.1.我的应用程序最后一个调用是CG ImageDestinationFinalize,以创建编辑的图像NSData.崩溃报告显示,在出现崩溃发生在GLTextureManager之前,CoreImage空间中继续进行呼叫.

这可能是内存不足的问题吗?你看到这个问题吗?如何解决

PhotoEditor.swift的相关代码,内部函数fullImageOutput,从editSingleAsset调用,后台队列中运行QOS_CLASS_UTILITY:

  1. let outputPhoto = //the generated CIImage that is the edited photo to be saved to disk
  2. let dataRef = CFDataCreateMutable(nil,0)
  3.  
  4. if let destination = CGImageDestinationCreateWithData(dataRef,"public.jpeg",1,nil) {
  5. struct ContextStruct {
  6. static var ciContext: CIContext? = nil
  7. }
  8. if ContextStruct.ciContext == nil {
  9. let eaglContext = EAGLContext(API: .OpenGLES2)
  10. ContextStruct.ciContext = CIContext(EAGLContext: eaglContext)
  11. }
  12. let cgImage = ContextStruct.ciContext!.createCGImage(outputPhoto,fromRect: outputPhoto.extent)
  13.  
  14. CGImageDestinationAddImage(destination,cgImage,nil)
  15.  
  16. if CGImageDestinationFinalize(destination) { //FIXME: CRASH
  17. //write to disk from dataRef etc
  18. }
  19.  
  20. }

崩溃报告的可视化:

崩溃报告详情:

  1. Exception Type: EXC_BAD_ACCESS (SIGSEGV)
  2. Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000145201ac0
  3. Triggered by Thread: 7
  4.  
  5. Thread 7 name:
  6. Thread 7 Crashed:
  7. 0 libsystem_platform.dylib 0x0000000199e36220 _platform_memmove + 48 (memmove.s:220)
  8. 1 CoreImage 0x0000000184e86e4c CI::GLTextureManager::texture_for_CGImage(CGImage*,CI::PixelFormat) + 372 (context-gles.cpp:910)
  9. 2 CoreImage 0x0000000184e8a310 CI::GLContext::bind_textures(CI::SerialObjectPtrArray*,CI::Kernel*) + 240 (context-gles.cpp:3060)
  10. 3 CoreImage 0x0000000184e899e0 CI::GLContext::render_apply_node(CI::Node const*,bool) + 160 (context-gles.cpp:2699)
  11. 4 CoreImage 0x0000000184e897fc CI::GLContext::recursive_render(CI::Node*,bool) + 912 (context-gles.cpp:2379)
  12. 5 CoreImage 0x0000000184e8a788 CI::GLContext::render(CI::Node*) + 180 (context-gles.cpp:2880)
  13. 6 CoreImage 0x0000000184e9bfec CI::_get_bitmap(CI::Context*,CI::Image*,CGRect,CGColorSpace*,CI::Bitmap*) + 676 (render.cpp:2622)
  14. 7 CoreImage 0x0000000184e9bc9c CI::image_get_bitmap(CI::Context*,CI::Bitmap*,unsigned long) + 664 (render.cpp:2680)
  15. 8 CoreImage 0x0000000184ea08e8 copyImageBlockSetOptsCallback(void*,CGImageProvider*,CGSize,__CFDictionary const*) + 856 (imageProvider.h:143)
  16. 9 CoreGraphics 0x0000000184af2198 CGImageProviderCopyImageBlockSet + 220 (CGImageProvider.c:500)
  17. 10 ImageIO 0x0000000185baa41c GetBytesImageProvider + 484 (CGImagePixelDataProvider.c:382)
  18. 11 ImageIO 0x0000000185c40440 _CGImagePluginWriteAppleJPEG + 2444 (imageAppleJPEG.c:2785)
  19. 12 ImageIO 0x0000000185ba3020 CGImageDestinationFinalize + 724 (CGImageDestination.c:2119)
  20. 13 MyAppNameHere 0x0000000100096468 _TFC11 MyAppNameHere 12PhotoEditor15fullImageOutputfS0_FT_GSqCSo22PHContentEditingOutput_ + 1272 (PhotoEditor.swift:71)
  21. 14 MyAppNameHere 0x0000000100113310 _TFFFFFC11 MyAppNameHere 36PhotosPickerCollectionViewController16editSingleAssetFS0_FCSo7PHAssetT_U_FT_T_U0_FTGSqCSo21PHContentEditingInput_GVSs10DictionaryCSo8NSObjectPSs9AnyObject___T_U_FT_T_U_FT_T_ + 172 (PhotosPickerCollectionViewController.swift:851)
  22. 15 libdispatch.dylib 0x0000000199c296e8 _dispatch_call_block_and_release + 24 (init.c:761)
  23. 16 libdispatch.dylib 0x0000000199c296a8 _dispatch_client_callout + 16 (object.m:513)
  24. 17 libdispatch.dylib 0x0000000199c37b40 _dispatch_root_queue_drain + 2140 (inline_internal.h:1063)
  25. 18 libdispatch.dylib 0x0000000199c372dc _dispatch_worker_thread3 + 112 (queue.c:4250)
  26. 19 libsystem_pthread.dylib 0x0000000199e3d470 _pthread_wqthread + 1092 (pthread.c:1990)
  27. 20 libsystem_pthread.dylib 0x0000000199e3d020 start_wqthread + 4 (pthread_asm.s:191)

解决方法

这是iOS 9中已经解决的iOS 9中的已知问题.源代码没有任何问题.

猜你在找的iOS相关文章