2015-10-16 3 views
7

AGGIORNAMENTO: Ho utilizzato uno dei miei DTS per l'anno su questo. Attualmente lavora con un tecnico dell'assistenza Apple. Su suo suggerimento, ho anche creato un bug report per questo. Aggiornerò questa discussione mentre il tempo passa sperabilmente in una soluzione FINALE.App Arresto anomalo di un intero dispositivo per iOS 9 + Xcode 7

In qualche modo, ho trovato un modo per creare un'app che riavvii letteralmente un simulatore e/o un dispositivo fisico. Evviva per me. Questo problema è iniziato quando ho eseguito l'aggiornamento a xcode 7 e ho iniziato a eseguire test su iOS 9. Su qualsiasi dispositivo/simulatore < iOS 9, questo problema non ha la sua brutta testa.

quando l'eseguo attaccato al Xcode, gli unici messaggi di log che vedo sono

XPC connection interrupted 
Terminating since there is no system app. 

ho ristretto la scelta a una sezione di codice che chiama

[self addChildViewController:segue.destinationViewController]; 

Questo codice è un parte di un "MultichildContainerViewController" creato nello stile di questo view controller

A questo punto, proprio non so dove cercare/fare per risolvere questo problema. Se commento l'aggiunta di childviewcontroller, tutto va bene e l'app funziona normalmente. Se NON lo commento, riavvia il mio intero simulatore.

Qualche idea su dove trovare ulteriori informazioni di debug o potenziali soluzioni? Solo non so dove guardare a questo punto per trovare maggiori informazioni a sua volta usare per chiedere aiuto. Qualsiasi aiuto è apprezzato, grazie.

MODIFICA: Non so se questo sia d'aiuto, ma sono stato in grado di rintracciarlo nell'effettivo sistema di simulazione iOS.log. Non sembra avere riferimenti alla mia base di codice, solo tabellone?

Oct 16 17:56:29 MyComputer backboardd[43977]: -[NSNull isEqualToString:]: unrecognized selector sent to instance 0x10de1baf0 
Oct 16 17:56:29 MyComputer backboardd[43977]: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x10d 
e1baf0' 
*** First throw call stack: 
(
0 CoreFoundation      0x000000010dbf6f65 __exceptionPreprocess + 165 
1 libobjc.A.dylib      0x000000010df82deb objc_exception_throw + 48 
2 CoreFoundation      0x000000010dbff58d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 
3 CoreFoundation      0x000000010db4cf7a ___forwarding___ + 970 
4 CoreFoundation      0x000000010db4cb28 _CF_forwarding_prep_0 + 120 
5 BackBoardServices     0x000000010d020b28 -[BKSHIDEventKeyCommandDescriptor isEqual:] + 155 
6 CoreFoundation      0x000000010db1630b -[__NSSetM addObject:] + 411 
7 CoreFoundation      0x000000010db466a0 -[NSMutableSet unionSet:] + 736 
8 BackBoardServices     0x000000010d0223a3 -[BKSHIDEventRouter addHIDEventDescriptors:] + 38 
9 backboardd       0x000000010c73a881 backboardd + 186497 
10 libdispatch.dylib     0x000000010e862df5 _dispatch_call_block_and_release + 12 
11 libdispatch.dylib     0x000000010e87e4a7 _dispatch_client_callout + 8 
12 libdispatch.dylib     0x000000010e868184 _dispatch_queue_drain + 1048 
13 libdispatch.dylib     0x000000010e867b3c _dispatch_queue_invoke + 595 
14 libdispatch.dylib     0x000000010e869454 _dispatch_root_queue_drain + 565 
15 libdispatch.dylib     0x000000010e869218 _dispatch_worker_thread3 + 98 
16 libsystem_pthread.dylib    0x000000010ebaa4f2 _pthread_wqthread + 1129 
17 libsystem_pthread.dylib    0x000000010eba8375 start_wqthread + 13 
) 

EDIT: voglio anche sottolineare che questo non è semplicemente causando l'applicazione per crash, questo sta causando il simulatore INTERO per riavviare. Posso anche attivare questo riavvio su un dispositivo fisico. Se questo fosse solo un semplice caso di chiamata isEqualToString su un NSNull, non dovrebbe SOLO arrestare la mia app? Non l'intero simulatore?

+0

Sto ricevendo lo stesso errore! Qualcun altro ha pubblicato un thread di supporto per apple https://forums.developer.apple.com/thread/22087. Succede a me ogni volta che provo a presentare un popover o un'animazione simile. Sto ancora cercando di isolare la situazione –

+0

Mi spiace sentirlo @HaydenHolligan. Ho aggiornato la domanda per mostrare i passaggi che sto prendendo per risolverlo. Speriamo che se/quando il mio problema verrà risolto, possiamo risolvere il tuo e gli altri. Up-vota questa domanda se pensi che sia importante. Aiuterà a renderlo visibile. – Ceryni

risposta

5

Penso di aver capito! Sono abbastanza sicuro che il mio problema è uguale al tuo. Lo stesso registro di crash e situazione.

Ho cercato di isolare il problema, quindi ho copiato lo storyboard in un progetto vuoto e rimosso tutte le connessioni e ho reso tutte le classi predefinite (nessuna classe personalizzata).

Dopo aver giocato un po ', ho deciso di provare a ricollegare un controller di visualizzazione divisa diverso alle stesse classi master e di dettaglio. Funziona! Così ho confrontato tutte le impostazioni e letteralmente nulla era diverso. Dannazione.

Che ora? Apri il codice sorgente. Fai clic con il pulsante destro del mouse sullo storyboard nel riquadro sinistro e seleziona "Apri con editor esterno". Questo dovrebbe aprire il codice sorgente dello storyboard. Ho confrontato il codice sorgente dei due controller split view e ho trovato una differenza.

Questo è dove ho guardato

<!--Split View Controller--> 
    <scene sceneID="X6N-vM-fHn"> 
     <objects> 
      <splitViewController id="xSd-V6-k6W" customClass="SplitViewController" sceneMemberID="viewController"> 
       <navigationItem key="navigationItem" id="yvV-sB-yKa"/> 
       <keyCommands> 
        <keyCommand/> 
       </keyCommands> 
       <connections> 
        <segue destination="PW6-z0-erU" kind="relationship" relationship="masterViewController" id="MBC-0A-hls"/> 
        <segue destination="xqk-PP-nzR" kind="relationship" relationship="detailViewController" id="sMq-cw-27p"/> 
       </connections> 
      </splitViewController> 
      <placeholder placeholderIdentifier="IBFirstResponder" id="nG8-BB-Qmu" userLabel="First Responder" sceneMemberID="firstResponder"/> 
     </objects> 
     <point key="canvasLocation" x="-157" y="-370"/> 
    </scene> 

Qual è la differenza?

<keyCommands> 
    <keyCommand/> 
</keyCommands> 

Non so cosa sia, o come sia arrivato lì, ma quando ho tolto quei 3 linee il crash andato via. Esiste una classe UIKeyCommand, ma non l'ho mai usata, quindi non sono sicuro che sia pertinente. Spero che questo ti aiuti!

+1

Punti Internet per voi signore! Ben fatto, dannatamente ben fatto. Stavo analizzando le differenze ma non le avevo ancora trovate. Aggiornerò Apple con questo, Spaventoso che questo possa mandare in crash un dispositivo. Non avevo lo stesso controller di visualizzazione, ma ho avuto la stessa parte di keyCommands XML. Rimuovendo quello riparato il mio problema. – Ceryni

+0

Lei, signore, ho il plauso da parte mia. Mi sono strappato i capelli per trattare con questi Storyboard e il seguente problema su IOS9 ha causato danni irreparabili alla mia anima. Ogni volta che ho sostituito quel seguito, un altro sarebbe scomparso magicamente, e provare tutto giù al punto di rimuovere un UIBarButtonItem e farlo a livello programmatico mi stava causando dolore. Funzionerebbero su iOS7, iOS8, non su iOS9 e non bloccando l'app, ma l'intero iPhone/iPad, ecc. !!!!! Accidenti. Questo mi porta a rovinare gli storyboard e solo a programmare ciò che voglio. –

+2

L'interfaccia utente per i comandi chiave si trova nella parte inferiore dell'ispettore Attributi per un controller di visualizzazione. La causa probabile è una pressione accidentale del pulsante +, e non rendersi conto che i campi aggiuntivi devono essere compilati. Inoltre, l'arresto anomalo di un comando di una chiave vuota sembra essere un nuovo comportamento in iOS 9. radar: // 23193389 sta monitorando il problema di root qui, sia in termini di comandi chiave vuoti non segnalati al momento della compilazione, sia miglioramenti dell'interfaccia utente per la configurazione della chiave comandi. –

0

Il registro indica esattamente ciò che è sbagliato.

Si sta tentando di chiamare isEqualToString su un oggetto nullo.

Verificare se questo oggetto è l'oggetto che si aspetta PRIMA di chiamare isEqualToString su di esso.

Tuttavia, dal momento che funzionava con versioni precedenti del sistema operativo, il solo controllo di null potrebbe non risolvere il problema. Potrebbe essere necessario capire perché questo elemento è ora nullo dove non era prima.

+0

Quindi sono d'accordo che questo è ciò che il messaggio di errore letterale sta segnalando, ma come faccio a sapere dove sta accadendo se nessuno degli stacktraces è collegato al mio codice? Sono tutti acquistati in CoreFoundation o backboardd. Ho così tante eccezioni/interruzioni di errore che il mio progetto sembra abbia la varicella blu. – Ceryni

+0

Vorrei iniziare cercando isEqualToString nel codice e vedere se l'oggetto che si sta chiamando è nullo. Hai ragione nel dire che l'intera sim non dovrebbe andare in crash. Quindi potrebbe esserci qualche altro problema di fondo. È solo il tuo progetto? La sim è ancora in crash se si tenta di eseguire un progetto diverso? Hai inavvertitamente modificato i file che fanno parte dei sim di iOS 9, come dove sono memorizzati? E le impostazioni di costruzione? Hai provato a reimpostare i contenuti e le impostazioni sul simulatore, fatto un dato derivato pulito e cancellato? –

+0

"Vorrei iniziare la ricerca di isEqualToString nel codice" - ho messo un punto di interruzione 'isEqualToString', nessuna delle chiamate di funzione sono stati in corso sul NSNulls "E 'solo il tuo progetto non la sim ancora in crash se? cerchi di eseguire un progetto diverso? " - Solo il mio progetto, Simulator funziona bene per altri progetti. Il mio progetto funziona anche su un simulatore 8.4 "Hai modificato inavvertitamente qualsiasi file che fa parte dei sim di iOS 9, come dove sono memorizzati" - temevo di aver fatto qualcosa di strano, così ho rimosso il Simulatore 9.0 e ne ha aggiunto uno nuovo. Stessi risultati – Ceryni

-1

Come altri hanno già detto, si sta schiantarsi su [NSNull isEqualToString:]

Se non siete sicuri di dove si trova nel codice, è possibile impostare un punto di interruzione un'eccezione in modo da sapere esattamente dove l'incidente è. Puoi farlo andando al tuo Breakpoint Navigator.In basso a sinistra, c'è un pulsante + che consente di aggiungere eccezione Breakpoint:

enter image description here

Una volta che avete impostato punto di interruzione, eseguire nuovamente la vostra applicazione e dovrebbe impostare un punto di interruzione in cui l'incidente è. In bocca al lupo!

+0

Grazie per il suggerimento, ma l'aggiunta di questo punto di interruzione non rileva questo errore. Il simulatore si riavvia/si blocca ancora. – Ceryni