2016-10-05 2 views
1

Я получаю от аварии GCDWebServer (3.3.3), когда мое приложение входит в фон:Сбой в GCDWebServer, когда приложение входит фон

#3 0x000000010041ea80 in -[GCDWebServer dealloc] at project/Pods/GCDWebServer/GCDWebServer/Core/GCDWebServer.m:221 
#4 0x00000001004248b8 in __destroy_helper_block_() 
#5 0x000000018dd52a28 in _Block_release() 
#6 0x00000001020ad21c in _dispatch_client_callout() 
#7 0x00000001020b2284 in _dispatch_main_queue_callback_4CF() 
#8 0x000000018ee21f2c in __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__() 
#9 0x000000018ee1fb18 in __CFRunLoopRun() 
#10 0x000000018ed4e048 in CFRunLoopRunSpecific() 
#11 0x00000001907d1198 in GSEventRunModal() 
#12 0x0000000194d28628 in -[UIApplication _run]() 
#13 0x0000000194d23360 in UIApplicationMain() 
#14 0x000000010009243c in main at project/main.m:10 
#15 0x000000018dd305b8 in start() 
Enqueued from com.apple.main-thread (Thread 1)Queue : com.apple.main-thread (serial) 
#0 0x00000001020b8ba4 in _dispatch_queue_push() 
#1 0x0000000100424680 in -[GCDWebServer _stop] at project/Pods/GCDWebServer/GCDWebServer/Core/GCDWebServer.m:734 
#2 0x0000000100424a10 in -[GCDWebServer _didEnterBackground:] at project/Pods/GCDWebServer/GCDWebServer/Core/GCDWebServer.m:746 

Специфическая линия:

GWS_DCHECK(_options == nil); // The server can never be dealloc'ed while running because of the retain-cycle with the dispatch source 

Это похоже, что словарь _options должен быть nil (например, сервер должен быть остановлен), но похоже, что _options никогда не устанавливается в nil по этому коду: он установлен в 0 - stop, но не в - _stop.

Возможно, я что-то потерял, так как это было замечено другими людьми.

ответ

1

У меня была та же проблема. Я решил, что он сохраняет сервер в статической переменной в моем классе вместо сохранения в функции.

Это не работает:

class Server { 
     static func initialize() { 
      let webServer = GCDWebServer() 
      ... 
      webServer?.start(withPort: 8081, bonjourName: nil) 
     } 
    } 

Это работы:

class Server { 
     static let webServer = GCDWebServer() 
     static func initialize() { 
      ... 
      webServer?.start(withPort: 8081, bonjourName: nil) 
     } 
    } 
+0

Не знаю, почему просящий не отметить это как ответ, но я столкнулся с той же проблемой, и я могу подтвердить, что это работает для меня. Я использую objc, поэтому я сделал сильную ссылку на webServer, и это решает проблему. – wahkiz

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