Input-mask-ios: 12.2 Développeur bêta 2 Crash - erreur initWithCoder

Créé le 15 févr. 2019  ·  11Commentaires  ·  Source: RedMadRobot/input-mask-ios

Conditions préalables

  • [X ] Mettez un X entre les crochets sur cette ligne si vous avez effectué toutes les opérations suivantes :

    • lisez notre Wiki ;

    • lire l'intégralité de la section Problèmes connus ;

    • vérifié que mon problème n'est pas déjà rempli ;

    • recherché la balise input-mask StackOverflow pour des problèmes similaires.

Décrivez le bogue

J'ai remarqué qu'après avoir utilisé ViewController qui utilisait un TextField utilisant le masque de saisie, l'application plantait. C'était étrange car cette page exacte fonctionnait la veille et je n'avais apporté aucune modification à ce contrôleur de vue ou à cette interface utilisateur dans le storyboard - Le seul changement que j'avais apporté était dans mon environnement: j'avais construit l'application avec xCode 10 Beta 2 pour pouvoir exécuter/tester l'application sur mon iphone qui exécute la version bêta d'iOS 12.2 Developer bêta 2. J'ai décidé de créer un nouveau contrôleur de vue en rassemblant un par un tous les contrôles de la page actuelle et en voyant quand il pauses - il ne s'est cassé qu'au moment où j'ajoute les objets de délégué InputMask.

Étapes pour reproduire le comportement :

Avoir une page avec une configuration InputMask Textfield - créer une application pour iOS 12.2 Developer beta 2 (en utilisant xCode 10 beta 2)

Comportement attendu
Fonctions de masque de saisie

Comportement réel
L'application plante : erreur produite :
Terminating app due to uncaught exception 'NSGenericException', reason: 'This coder requires that replaced objects be returned from initWithCoder:'

C'est le cœur du problème, cependant, le reste de la pile d'appels d'erreur peut être trouvé ici :

*** 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 )

Informations sur la plate-forme

  • Version du système d'exploitation : iOS 12.2 bêta 2
  • Version de la bibliothèque : 4.1.0
  • Langue : Swift 4.2
bug

Commentaire le plus utile

Toujours pas de mises à jour ?

Tous les 11 commentaires

Salut @SteynMarnus ,
Belle prise! Merci beaucoup pour toutes les informations de débogage.

J'ai essayé d'exécuter notre Sample avec le dernier Xcode-beta , et j'ai les mêmes résultats que vous.
Je vais y jeter un coup d'œil, et je partagerai les résultats de l'enquête.

Salut @SteynMarnus ,
Belle prise! Merci beaucoup pour toutes les informations de débogage.

J'ai essayé d'exécuter notre Sample avec le dernier Xcode-beta , et j'ai les mêmes résultats que vous.
Je vais y jeter un coup d'œil, et je partagerai les résultats de l'enquête.

Pas de problème! Beta, c'est un peu le « Far West ». Merci de vous y être penché.

D'accord, d'une manière ou d'une autre je l'ai raté.
Ici , problème connu n°2 :

Pour réduire la taille occupée par les métadonnées Swift, les initialiseurs de commodité définis dans Swift n'allouent désormais un objet à l'avance que s'ils appellent un initialiseur désigné défini dans Objective-C. Dans la plupart des cas, cela n'a aucun effet sur votre programme, mais si votre initialiseur de commodité est appelé depuis Objective-C, l'allocation initiale de +alloc est libérée sans qu'aucun initialiseur ne soit appelé.

Fondamentalement, un problème de dépendance de séquence alloc/init . _De nouveau…_

Eh bien, pendant que cela est résolu, une solution de contournement serait de remplacer

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

avec

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()
}

Gardons cela ouvert jusqu'à la sortie officielle de Swift 5 .

Oh ok cool @taflanidi , je vais essayer - je suppose que je dois le remplacer dans le fichier MaskedTextViewDelegate.swift dans le pod lui-même, n'est-ce pas ?

@SteynMarnus tout ce qui vous convient. Selon la taille de votre équipe, vous voudrez peut-être introduire votre propre fourche ou simplement remplacer ces lignes dans le pod lui-même si vous travaillez seul ; tu sais mieux que moi.

Je ne veux pas mettre ces changements dans la bibliothèque tout de suite . Cette solution de contournement sonne une duplication de code, et il s'agit toujours d'un problème d'optimisation Swift 5, donc je pense que nous ferions mieux de nous retenir.

UPD. Je suppose que c'est MaskedTextFieldDelegate vous utilisez, pas MaskedTextViewDelegate ; néanmoins, les deux ont le même problème.

Hey
Aujourd'hui, Xcode 10.2 est sorti et ce bug est toujours là.

@taflandi votre solution de contournement n'aide pas.

@sashaBizquit J'ai trouvé simplement une solution de contournement
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() }
Parfois, vous devrez peut-être nettoyer la construction après ce remplacement

Salut @sashaBizquit , salut @Rik626 !
Merci beaucoup pour vos rapports.

Le patch arrive plus tard cette semaine, restez à l'écoute.

une mise à jour sur ce problème ?

Toujours pas de mises à jour ?

D'accord, il y avait donc un autre bogue lié à Swift 5 que j'ai dû enquêter en plus afin de m'assurer que tout fonctionnait, cela a pris un certain temps.

Rencontrez v. 4.1.1 .

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

KompoD picture KompoD  ·  5Commentaires

TikhonovAlexander picture TikhonovAlexander  ·  3Commentaires

caioremedio picture caioremedio  ·  6Commentaires

Robuske picture Robuske  ·  4Commentaires

osterlind picture osterlind  ·  3Commentaires