2015-04-03 9 views
12

Viene visualizzato un errore EXC_BREAKPOINT (EXC_ARM_BREAKPOINT, sottocodice = 0xe7ffdefe) durante l'esecuzione della mia app su un dispositivo iOS7. Il fatto è che funziona senza problemi sul simulatore iOS7.Xcode: EXC_BREAKPOINT (EXC_ARM_BREAKPOINT, sottocodice = 0xe7ffdefe)

Utilizzando i punti di interruzione, ho trovato l'errore si verifica in linea 6.

required init(coder aDecoder: NSCoder) { 
    personPicker = ABPeoplePickerNavigationController() 
    super.init(coder: aDecoder) 
    personPicker.peoplePickerDelegate = self 
} 
/*error line*/ @IBAction func BPressed(sender: AnyObject) { 
self.presentViewController(personPicker, animated: true, completion: nil) 
} 

Questo errore è nuovo, e non è apparso sul mio dispositivo fino a quando ho aggiunto queste righe nel codice;

 let url = NSURL(string: urlPath) 
     let request = NSURLRequest(URL: url!) 
     NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in 
      println(NSString(data: data, encoding: NSUTF8StringEncoding)) 
     } 

Inoltre; i punti di debugger l'errore a questa linea:

0x16a7f0: trap 

e dà questa uscita nella console:

fatal error: attempt to create an Unmanaged instance from a null pointer

Questo errore fa sì che uno schermo nero sul dispositivo, anche se ho cambiato nulla nella storyboard.

Grazie per aver dedicato tempo.

Modifica: questo errore non ha mostrato alcun risultato nei motori di ricerca, ma penso che possa essere correlato a obj-c.

+1

Sto ricevendo lo stesso errore (incluso il sottocodice), ma non vedo nulla nella console. Funziona bene sul mio iPhone 6, ma si blocca sul mio 4S e iPod Touch. Sembra essere il caso sia nel simulatore che sui dispositivi reali. La linea problematica per me è una chiamata append a una matrice di Coordinate (che è una struttura di x e y Ints). – vegather

+2

Sei in qualsiasi posto nel tuo codice usando un Int (o qualsiasi altro dataType) che potrebbe avere un valore così grande da risultare un po 'eccessivo? Come ho detto, ho avuto il problema solo con 4S e iTouch (dispositivi a 32 bit), ma funzionava perfettamente sul mio iPhone 6. Bene, stavo usando normali Ints per memorizzare il valore da arc4random(). Cambiare questo in UInt32 ha risolto il mio problema. http: // stackoverflow.it/questions/28177192/app-crashes-on-iphone-4s-ma-no-other-device-possibile-problema-con-skphysicsconta – vegather

+0

Una bella prospettiva, davvero. Ma il simulatore di iOS non emula 32 bit? Il mio codice utilizza effettivamente molte variabili, ma il valore massimo è 13 cifre per int e 40 per stringa. – TheSaurus

risposta

11

Ho riscontrato questo problema oggi durante il test del codice Swift contro un vecchio iPad 2 (penso sia un iPad 2 - è il modello MD368LL/A), con iOS 8.1.3. Si è scoperto che il problema esisteva tutto il mondo che mi stava chiamando qualcosa di simile:

Int(arc4random() % <someInt>) 

Questo ha funzionato bene su iPad più tardi, iPhone5S, iPhone6, ecc risolto modificando il codice a:

Int(UInt32(arc4random()) % UInt32(<someInt>)) 

penso era un overflow di registro sull'hardware più vecchio.

+0

Grazie. Provato e risolto il problema. – TheSaurus

+0

Grazie mille @dlw – Abdelrahman

+0

Esattamente lo stesso problema per noi: crash quando si esegue String (intA + intB) su dispositivi precedenti. Marcatura esplicita come correzioni UInt32. – cayleyh

2

Nel mio caso, questo è risultato da un problema di bit overflow se si esegue un numero troppo grande di un numero troppo piccolo di un tipo. Per esempio. Int(someNumber) se someNumber era un tipo Int64.

iPhone pausa 5c alla riga di codice:

enter image description here

1

mi sono imbattuto in questo problema, in iPhone 5, che è iOS 10.3.3.

let date = Date() 
// Crashes in `iPhone 5`, but works in `iPhone 5s`. 
let time: Int = 1000 * Int(date.timeIntervalSince1970) //< Crash due to cast `Double` to `Int` 

// This crashes in `iPhone 5`, and `iPhone 5s` too. 
let time: Int32 = 1000 * Int32(date.timeIntervalSince1970) 

// It works fine in `iPhone 5`, and `iPhone 5s`. 
let time: Int64 = 1000 * Int64(date.timeIntervalSince1970) 
Problemi correlati