2017-02-01 11 views
1

애플리케이션에 다음과 같은 오류가 발생하지만 소스를 찾기 위해 재현 할 수 없습니다. 주요 작품은 다수의 비동기 네트워크 업로드 요청이며, 이는 동시 OperationQueue에 배치되고 배경도 지원합니다.iOS에서 swift를 사용하여 CFNetwork 크래시가 발생했습니다.

추락 : NSOperationQueue 0x174037ae0 :: NSOperation의 0x17044f7b0 (QOS : DEFAULT) EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000ce6fabec8

추락 : NSOperationQueue 0x170036660 :: NSOperation 0x17425e360 (QOS : DEFAULT)

0 libobjc.A.dylib    0x181c21704 objc_object::release() + 8 
1 CFNetwork      0x1839a196c __destroy_helper_block_.465 + 40 
2 libsystem_blocks.dylib   0x1820afa28 _Block_release + 144 
3 Foundation      0x183c0623c -[NSBlockOperation dealloc] + 64 
4 Foundation      0x183cc245c __NSOQSchedule_f + 484 
5 libdispatch.dylib    0x18205a1bc _dispatch_client_callout + 16 
6 libdispatch.dylib    0x1820683dc _dispatch_queue_serial_drain + 928 
7 libdispatch.dylib    0x18205d9a4 _dispatch_queue_invoke + 652 
8 libdispatch.dylib    0x18206a34c _dispatch_root_queue_drain + 572 
9 libdispatch.dylib    0x18206a0ac _dispatch_worker_thread3 + 124 
10 libsystem_pthread.dylib  0x1822632a0 _pthread_wqthread + 1288 
11 libsystem_pthread.dylib  0x182262d8c start_wqthread + 4 

응용이 작성된 것입니다 스위프트 3. 당신이 제안 할 수있는 것이 있습니까?

+0

어디에서 충돌 사고가 발생했는지 알려주실 수 있습니까? –

+0

디버그 모드에서 재현 할 수 없어서이 충돌을 얻을 수 없습니다. 나는이 보고서를 Fabric (충돌에 대한 코딩 라인을 포함하지 않음)에서 얻었고 특정 장소를보기 시작하기 위해 도움을 얻기를 희망했다. – nick3389

답변

1

제 3 자 라이브러리를 업데이트하여이 똑같은 충돌 로그를 해결했습니다. 해당 라이브러리의 문제는 블록 객체를 (사본) 대신 (강하고 비 구조적 인) 블록 객체로 정의하는 것이 었습니다. Objective-C 라이브러리 였지만 Swift 블록 객체 속성에도 동일한 강약/약한 원리가 적용됩니다. 그 블록들이 NSOperationQueue에 추가 되었다면 그 오류를 볼 수 있습니다. NSOperationQueues에 강력한 블록 속성이나 강력한 참조가 있습니까?

+0

작업에 강력한 참조 (블록이 아님)가 있지만 작업을 취소하거나 완료 한 후에 해당 작업에 액세스하지 못하도록합니다. 내 문제는 이전에 구현 한 사람이 같은 작업에 대해 2 명의 대리인을 소집했다는 것입니다. 그가 URLSession을 만들 때 그는 자신을 대리자 (작업 자체)로 설정하고 세션이 백그라운드에서 계속되면 handleEventsForBackgroundURLSession의 completionHandler를 다른 사용자 지정 대리자에 추가했습니다. 그래서 두 대표는 때때로 함께 달리고 충돌이있을 수 있습니다. 나는 이제 1 명의 사용자 지정 대리인과 작업을 수행하고 기다렸습니다 ... – nick3389