2014-11-01 9 views
6

La mia app si arresta in modo anomalo in alcuni scenari. Impossibile trovare il motivo & luogo di incidente.Impossibile capire dove si blocca MyApp

Di seguito è riportato il registro degli arresti anomali (iPad/iOS 8.0.2).

Hardware Model:  iPad2,5 
OS Version:   iOS 8.0.2 (12A405) 
Report Version:  105 

Exception Type: EXC_CRASH (SIGABRT) 
Exception Codes: 0x0000000000000000, 0x0000000000000000 
Triggered by Thread: 0 
Thread 0 Crashed: 
0 libsystem_kernel.dylib   0x306b3dfc __pthread_kill + 8 
1 libsystem_pthread.dylib   0x30733d0e pthread_kill + 58 
2 libsystem_c.dylib    0x30653934 abort + 72 
3 libc++abi.dylib     0x2f864bb8 abort_message + 84 
4 libc++abi.dylib     0x2f87e66a default_terminate_handler() + 262 
5 libobjc.A.dylib      0x30052f0e _objc_terminate() + 190 
6 libc++abi.dylib     0x2f87bdec std::__terminate(void (*)()) + 76 
7 libc++abi.dylib     0x2f87b5ac __cxa_throw + 108 
8 libobjc.A.dylib      0x30052d46 objc_exception_throw + 246 
9 CoreFoundation     0x225dfe58 +[NSException raise:format:arguments:] + 100 
10 Foundation      0x232af2c4 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 88 
11 BaseBoard      0x270a08d8 __25-[BSAction sendResponse:]_block_invoke + 140 
12 libdispatch.dylib    0x305bc99c _dispatch_barrier_sync_f_invoke + 44 
13 BaseBoard      0x270a0842 -[BSAction sendResponse:] + 98 
14 UIKit        0x25fd54d0 -[UIFetchContentInBackgroundAction sendResponse:] + 212 
15 libdispatch.dylib    0x305b3610 _dispatch_call_block_and_release + 8 
16 libdispatch.dylib    0x305b35fc _dispatch_client_callout + 20 
17 libdispatch.dylib    0x305be2b2 _dispatch_main_queue_callback_4CF$VARIANT$mp + 714 
18 CoreFoundation     0x225a5e5c __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 4 
19 CoreFoundation     0x225a457c __CFRunLoopRun + 1508 
20 CoreFoundation     0x224f1dac CFRunLoopRunSpecific + 472 
21 CoreFoundation     0x224f1bbe CFRunLoopRunInMode + 102 
22 GraphicsServices    0x2985404c GSEventRunModal + 132 
23 UIKit        0x25abda2c UIApplicationMain + 1436 
24 MyApp        0x000fb9f2 main (main.m:15) 
25 libdyld.dylib      0x305eeaac start + 0 

Grazie in anticipo ..

+0

aggiungere un'eccezione globale Breakpoint http://blog.manbolo.com/2012/01/23/xcode- tips-1-break-on-exceptions – Flexicoder

+0

Grazie a @flexicoer per la risposta. Questo crash è nella mia build rilasciata. E non ci sono passaggi per riprodurre questo crash. L'unica cosa che ho, questo registro degli arresti anomali. – Vardhan

+0

Puoi capirlo? Sto riscontrando un crash simile nella mia app e non riesco a capire dove si blocca. – tbag

risposta

12

Il messaggio di eccezione che corrisponde alla traccia dello stack è:

"tale richiesta è stato castrato - non si può chiamare -sendResponse: due volte né dopo averlo codificato "

Mentre non è possibile dirlo con certezza dallo stack da solo, è probabile che tu abbia chiamato la com pletionHandler ha passato a -application della tua app delegato: performFetchWithCompletionHandler: metodo due volte.

1

Il recupero dello sfondo viene attivato dal sistema operativo in base al valore impostato in setMinimumBackgroundFetchInterval: method. Quello che vedi è l'aspetto del sistema operativo con la tua app se il recupero dello sfondo richiede troppo tempo.

Ti viene assegnata una finestra di tempo (30 secondi) per eseguire il tuo lavoro. Se non si finisce, il sistema operativo uccide la tua app con l'eccezione di cui sopra. Ulteriori informazioni su come prolungare il tempo necessario here.

In sostanza, è necessario chiedere di più tempo per completare il lavoro di fondo in questo modo:

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{ 
     // Clean up any unfinished task business by marking where you 
     // stopped or ending the task outright. 
     [application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }]; 

    // Start the long-running task and return immediately. 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

     // Do the work associated with the task, preferably in chunks. 

     [application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }); 
}