La aplicación se bloquea al presionar el enlace en UITextView

Me enfrento a un extraño error en mi aplicación de iOS, y solo ocurre en el dispositivo. En mi aplicación tengo una página de inicio, desde allí, si el usuario presiona un button, mostraré una hoja de formulario (Acerca de nosotros).

let storyBoard = UIStoryboard(name: "Utility", bundle: nil); let aboutUsVC = storyBoard.instantiateViewControllerWithIdentifier("AboutUs") as! AboutUsViewController; aboutUsVC.modalPresentationStyle = .FormSheet; aboutUsVC.prefernetworkingContentSize = CGSize(width: 500,height: 400); self.presentViewController(aboutUsVC, animated: true, completion: nil); 

Coloqué un UITextView dentro de esa página sobre nosotros y agregué un enlace como contenido: Enlace en vista de texto

Problema 1

Cuando presiono un time sobre ese enlace, recibo un post de advertencia en mi console:

<_UIRotatingAlertController: 0x13e107200> en el que ya se está presentando

Problema 2

Después de la pulsación larga si hago clic en el enlace de nuevo, la aplicación se bloquea con el siguiente post:

2016-03-16 18: 11: 37.022 MyApp [938: 400786] *** Fallo de aserción en – [UITextView startInteractionWithLinkAtPoint:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.29. 5 / UITextView_LinkInteraction.m: 377

2016-03-16 18: 11: 37.023 MyApp [938: 400786] *** Finalización de la aplicación debido a una exception no detectada 'NSInternalInconsistencyException', motivo: '' *** Primera stack de llamadas de lanzamiento: (0x184220f48 0x198e47f80 0x184220e18 0x185114a1c 0x18a12de50 0x189d38be4 0x189d2f330 0x189958b5c 0x1897e685c 0x189d3070c 0x1897a58b8 0x1897a263c 0x1841d7bd0 0x1841d5974 0x1841d5da4 0x184104ca0 0x18f184088 0x18981cffc 0x100188368 0x19968a8b8) libc ++ abi.dylib: terminando con una exception no detectada de tipo NSException

Creo que el UIKit está causando ese locking. ¿Cómo puedo solucionar este locking?

Más información:

  1. SDK base: 9.2
  2. Objetivo de deployment: 8.1
  3. Xcode Versión: 7.2.1
  4. iOS Device Versión del sistema operativo: 9.1

Como se mencionó en esta publicación de Apple Forum , implementé el siguiente UITextViewDelegate y resolvió mi problema

 func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool { UIApplication.shanetworkingApplication().openURL(URL) return false } 

@ Luis Tur: Gracias por el enlace.

También hemos visto este problema en PSPDFKit y después de investigar el ensamblaje WKWebView y WKWebView fonts WKWebView encontramos una solución que sigue siendo horrible, pero no invasiva.

La estrategia principal es ser selectivo y aplicar una solución temporal justo a time, luego limpiar nuevamente. Puede leer el código fuente aquí:

https://gist.github.com/steipete/b00fc02aa9f1c66c11d0f996b1ba1265

Y por favor dupe rdar: // 26295020 por lo que esto se espera que se arregle a time para iOS 10. (El error existe desde iOS 8 y se informó por primera vez en iOS 8b5).

Esta es potencialmente una mejor solución que cambiar el comportamiento de cómo interactúan las URL.

Me enfrenté a este problema cuando usé un formatting URL incorrecto en mis enlaces. Quería presentar un nuevo controller en la pantalla al tocar un enlace e implementar un esquema de URL personalizado para admitirlo. Al hacerlo, escribí erróneamente el esquema en el esquema de formatting scheme:\\ lugar de scheme:// y pillé el locking.