Input-mask-ios: 12.2 Crash del desarrollador beta 2 - error de initWithCoder

Creado en 15 feb. 2019  ·  11Comentarios  ·  Fuente: RedMadRobot/input-mask-ios

Prerrequisitos

  • [X] Pon X entre los corchetes en esta línea si has hecho todo lo siguiente:

Describe el error

Noté que después de usar ViewController que usaba un TextField utilizando la máscara de entrada, la aplicación fallaba. Esto fue extraño ya que la página exacta funcionó el día anterior y no había realizado ningún cambio en ese controlador de vista o interfaz de usuario en el guión gráfico: el único cambio que hice fue en mi entorno: había creado la aplicación con xCode 10 Beta 2 para poder ejecutar / probar la aplicación en mi iPhone que está ejecutando la versión beta de iOS 12.2 Developer beta 2. Decidí construir un nuevo controlador de vista al traer todos los controles de la página actual uno por uno y ver cuándo se rompe: solo se rompió en el momento en que agregué los objetos delegados de InputMask.

Pasos para reproducir el comportamiento:

Tener una página con una configuración InputMask Textfield: compile la aplicación para iOS 12.2 Developer beta 2 (usando xCode 10 beta 2)

Comportamiento esperado
Funciones de máscara de entrada

Comportamiento real
La aplicación se bloquea: se produce un error:
Terminating app due to uncaught exception 'NSGenericException', reason: 'This coder requires that replaced objects be returned from initWithCoder:'

Ese es el núcleo del problema, sin embargo, el resto de la pila de llamadas de error se puede encontrar aquí:

*** First throw call stack: ( 0 CoreFoundation 0x0000000108ca072b __exceptionPreprocess + 331 1 libobjc.A.dylib 0x000000010768eac5 objc_exception_throw + 48 2 CoreFoundation 0x0000000108ca0585 +[NSException raise:format:] + 197 3 UIFoundation 0x000000010f47e89c UINibDecoderDecodeObjectForValue + 827 4 UIFoundation 0x000000010f47eaf9 UINibDecoderDecodeObjectForValue + 1432 5 UIFoundation 0x000000010f47e554 -[UINibDecoder decodeObjectForKey:] + 251 6 UIKitCore 0x0000000111825e90 -[UIViewController initWithCoder:] + 1021 7 DumaPay Consumer iOS 0x00000001055bde66 $s20DumaPay_Consumer_iOS25TestAddCardViewControllerC5coderACSgSo7NSCoderC_tcfc + 2214 8 DumaPay Consumer iOS 0x00000001055bdf2f $s20DumaPay_Consumer_iOS25TestAddCardViewControllerC5coderACSgSo7NSCoderC_tcfcTo + 47 9 UIKitCore 0x0000000111aaae89 -[UIClassSwapper initWithCoder:] + 246 10 UIFoundation 0x000000010f47e852 UINibDecoderDecodeObjectForValue + 753 11 UIFoundation 0x000000010f47e554 -[UINibDecoder decodeObjectForKey:] + 251 12 UIKitCore 0x0000000111aaf4d1 -[UIRuntimeConnection initWithCoder:] + 178 13 UIFoundation 0x000000010f47e852 UINibDecoderDecodeObjectForValue + 753 14 UIFoundation 0x000000010f47eaf9 UINibDecoderDecodeObjectForValue + 1432 15 UIFoundation 0x000000010f47e554 -[UINibDecoder decodeObjectForKey:] + 251 16 UIKitCore 0x0000000111aacd81 -[UINib instantiateWithOwner:options:] + 1216 17 UIKitCore 0x0000000111fc5290 -[UIStoryboard instantiateViewControllerWithIdentifier:] + 181 18 DumaPay Consumer iOS 0x0000000105623ea9 $s20DumaPay_Consumer_iOS28AddCardScannerViewControllerC010goToManualfE004cardG6ResultySo0b15CardsRecognizerN0CSg_tF + 249 19 DumaPay Consumer iOS 0x0000000105623d2e $s20DumaPay_Consumer_iOS28AddCardScannerViewControllerC02oneF15ManuallyClicked6senderyyp_tF + 62 20 DumaPay Consumer iOS 0x0000000105623d8c $s20DumaPay_Consumer_iOS28AddCardScannerViewControllerC02oneF15ManuallyClicked6senderyyp_tFTo + 76 21 UIKitCore 0x0000000111e2e834 -[UIApplication sendAction:to:from:forEvent:] + 83 22 UIKitCore 0x00000001118845b5 -[UIControl sendAction:to:forEvent:] + 67 23 UIKitCore 0x00000001118848d2 -[UIControl _sendActionsForEvents:withEvent:] + 450 24 UIKitCore 0x0000000111883888 -[UIControl touchesEnded:withEvent:] + 583 25 UIKitCore 0x0000000111e6751e -[UIWindow _sendTouchesForEvent:] + 2547 26 UIKitCore 0x0000000111e68c02 -[UIWindow sendEvent:] + 4079 27 UIKitCore 0x0000000111e47346 -[UIApplication sendEvent:] + 356 28 UIKitCore 0x0000000111f178c3 __dispatchPreprocessedEventFromEventQueue + 3232 29 UIKitCore 0x0000000111f1a1e9 __handleEventQueueInternal + 5911 30 CoreFoundation 0x0000000108c07c11 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 31 CoreFoundation 0x0000000108c07493 __CFRunLoopDoSources0 + 243 32 CoreFoundation 0x0000000108c01b4f __CFRunLoopRun + 1231 33 CoreFoundation 0x0000000108c01332 CFRunLoopRunSpecific + 626 34 GraphicsServices 0x000000010f1222fe GSEventRunModal + 65 35 UIKitCore 0x0000000111e2d1d2 UIApplicationMain + 140 36 DumaPay Consumer iOS 0x0000000105609bdb main + 75 37 libdyld.dylib 0x000000010a883861 start + 1 38 ??? 0x0000000000000001 0x0 + 1 )

Información de la plataforma

  • Versión del sistema operativo: iOS 12.2 beta 2
  • Versión de la biblioteca: 4.1.0
  • Idioma: Swift 4.2
bug

Comentario más útil

¿Aún no hay actualizaciones?

Todos 11 comentarios

Hola @SteynMarnus ,
¡Buena atrapada! Muchas gracias por toda la información de depuración.

Intenté ejecutar nuestro Sample con el último Xcode-beta , y obtuve los mismos resultados que tú.
Lo echaré un vistazo y compartiré los resultados de la investigación.

Hola @SteynMarnus ,
¡Buena atrapada! Muchas gracias por toda la información de depuración.

Intenté ejecutar nuestro Sample con el último Xcode-beta , y obtuve los mismos resultados que tú.
Lo echaré un vistazo y compartiré los resultados de la investigación.

¡No hay problema! Beta es un poco del 'salvaje oeste'. Gracias por investigarlo.

De acuerdo, de alguna manera lo he echado de menos.
Aquí , problema conocido no 2:

Para reducir el tamaño que ocupan los metadatos de Swift, los inicializadores de conveniencia definidos en Swift ahora solo asignan un objeto por adelantado si están llamando a un inicializador designado definido en Objective-C. En la mayoría de los casos, esto no tiene ningún efecto en su programa, pero si su inicializador de conveniencia se llama desde Objective-C, la asignación inicial de + alloc se libera sin que se llame a ningún inicializador.

Básicamente, un problema de dependencia de secuencia alloc/init . _De nuevo…_

Bueno, mientras esto se resuelve, una solución alternativa sería reemplazar

public override convenience init() {
    // Interface Builder support
    self.init(primaryFormat: "")
}

con

public override init() {
    // Interface Builder support
    self.primaryMaskFormat = ""
    self.autocomplete = true
    self.autocompleteOnFocus = true
    self.rightToLeft = false
    self.affineFormats = []
    self.affinityCalculationStrategy = .wholeString
    self.customNotations = []
    self.onMaskedTextChangedCallback = nil
    super.init()
}

Mantengamos esto abierto hasta el lanzamiento oficial de Swift 5 .

Oh, está bien @taflanidi , MaskedTextViewDelegate.swift en el pod en sí, ¿verdad?

@SteynMarnus lo que más te convenga. Dependiendo del tamaño de su equipo, es posible que desee introducir su propia bifurcación o simplemente reemplazar esas líneas en el módulo si trabaja por su cuenta; tu sabes mejor que yo.

No quiero poner esos cambios en la biblioteca todavía . Esta solución alternativa suena a duplicación de código, además de que sigue siendo un problema de optimización de Swift 5, así que creo que será mejor que esperemos.

UPD. Supongo que es MaskedTextFieldDelegate que está usando, no MaskedTextViewDelegate ; sin embargo, ambos tienen el mismo problema.

Oye
Hoy se ha lanzado Xcode 10.2 y este error todavía está ahí.

@taflanidi, tu solución no ayuda.

@sashaBizquit Encontré simplemente una solución
swift required public init?(coder aDecoder: NSCoder) { // Interface Builder support self.primaryMaskFormat = "" self.autocomplete = true self.autocompleteOnFocus = true self.rightToLeft = false self.affineFormats = [] self.affinityCalculationStrategy = .wholeString self.customNotations = [] self.onMaskedTextChangedCallback = nil super.init() } public override init() { // Interface Builder support self.primaryMaskFormat = "" self.autocomplete = true self.autocompleteOnFocus = true self.rightToLeft = false self.affineFormats = [] self.affinityCalculationStrategy = .wholeString self.customNotations = [] self.onMaskedTextChangedCallback = nil super.init() }
A veces, es posible que deba limpiar la construcción después de este reemplazo

Hola @sashaBizquit , ¡oye @ Rik626!
Muchas gracias por tus informes.

El parche llegará a finales de esta semana, estad atentos.

alguna actualización sobre este tema?

¿Aún no hay actualizaciones?

De acuerdo, hubo otro error relacionado con Swift 5 que tuve que investigar adicionalmente para asegurarme de que todo funcionaba, tomó algo de tiempo.

Conoce v. 4.1.1 .

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

osterlind picture osterlind  ·  3Comentarios

MrJox picture MrJox  ·  11Comentarios

TikhonovAlexander picture TikhonovAlexander  ·  3Comentarios

LinusGeffarth picture LinusGeffarth  ·  4Comentarios

caioremedio picture caioremedio  ·  6Comentarios