web-dev-qa-db-fra.com

Message d'erreur '_BSMachError: (os/kern) capacité invalide (20)'

S'il vous plaît noter que ce message d'erreur est assez faible, il apparaît donc pour différentes raisons dans différents scénarios. Si vous avez un scénario qui n'est pas mentionné dans l'une des réponses ci-dessous, pensez également à ajouter votre situation. Cela pourrait donc constituer une solution centrale pour diverses situations qui génèrent ce message d'erreur.

Edit 10 nov. 2015 Notez aussi que j'ai marqué ma propre réponse comme étant la réponse, mais c'était avant que quiconque ait posté. Je suppose qu’aucune d’entre elles ne devrait vraiment être considérée comme la réponse, car comme nous l’avons vu ci-dessous ... cette erreur n’a pas qu'une réponse, car son niveau est si bas.

Je suis entrain de courir

  • iOS 9.0 simulateur
  • XCode 7.0

Tout fonctionnait bien hier.

Aujourd'hui, après un tas de travaux sur les éléments liés à la rotation, j'ai commencé à avoir cette erreur dans la sortie de la console lorsque je lance l'application dans le simulateur et que je la fais pivoter.

_BSMachError: (os/kern) capacité invalide (20)

_BSMachError: (os/kern) nom invalide (15)

 Screenshot for this issue - J'ai effacé mon dossier de construction, - J'ai nettoyé le dossier de données dérivé, - J'ai réinitialisé le simulateur.

Je travaillais avec 

  • UIViewController viewWillLayoutSubviews
  • UIViewController viewWillTransitionToSize:...

Je vérifiais également divers paramètres de "Dessin" dans l'inspecteur d'attributs dans IB.

J'ai également créé une catégorie d'utilitaires sur UIView dans laquelle j'ai créé un ensemble de méthodes qui créent des CGRect et m'aident à attribuer des cadres à des vues.

 Root View Controller

 Root View Controller Settings

170
Logicsaurus Rex

D'accord, je ne l'ai pas encore complètement épinglé, mais cela vous mènera à 99% du chemin ... .. J'utilise un contrôle de carte tiers d'ESRI, et quelque chose à ce sujet ne vous plait pas. paramètres dans l'inspecteur d'attributs. Je n'ai pas essayé chaque paramètre individuellement pour voir de quel paramètre il s'agit, mais lorsque je les ai tous désactivés (dans la zone rouge), tout a fonctionné comme un charme et j'ai arrêté de recevoir le message d'erreur ci-dessus dans la console. Si et quand j'ai le temps de bien cerner le réglage précis ou la combinaison de réglages, je mettrai à jour la réponse.

 enter image description here

32
Logicsaurus Rex

Basé sur le https://forums.developer.Apple.com/thread/15683

Remplacez "Localization native development region" dans info.plist par États-Unis au lieu de en.

Mis à jour: Vous pouvez ensuite annuler ces modifications.

143
blacharnia

J'ai également rencontré des erreurs de console _BSMachError lors d'une liaison profonde à l'application Paramètres sur iOS 9 à partir d'une action UIAlertController. Un dispatch_async a résolu mon problème:

[aAlertVC addAction:[UIAlertAction actionWithTitle:@"Settings" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
    dispatch_async(dispatch_get_main_queue(), ^{
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
    });
}]];
66
19Craig

C'est fou, mais la solution pour moi consistait simplement à supprimer tous les points d'arrêt du fichier où l'erreur s'était produite.

Quant à la cause? Je pense que j'ai accidentellement appuyé sur une touche de raccourci pour créer un point d'arrêt dans la ligne en cours. Parce que ce n'était pas prévu, j'ai appuyé à nouveau sur la même touche de raccourci pour le supprimer.

Oh mon cher XCode ...

14
agro1986

Je recevais les mêmes erreurs ...

_BSMachError: (os/kern) invalid capability (20)
_BSMachError: (os/kern) invalid name (15)

J'appelais openURL () depuis une UIAlertAction

alert.addAction(UIAlertAction(title: actionTitle, style: .Default) {
    UIApplication.shared.openURL(url)
 }

Le report de l'exécution du bloc jusqu'à la prochaine boucle d'exécution l'a corrigé ...

alert.addAction(UIAlertAction(title: actionTitle, style: .Default) {
    OperationQueue.main.addOperation {UIApplication.shared.openURL(url)}
 }
11
Murray Sagal

Je recevais les informations suivantes lors de la fourniture de nouvelles données:

> _BSMachError: (os/kern) invalid capability (20)
> _BSMachError: (os/kern) invalid name (15)

L'erreur s'est produite lorsqu'un bouton a été utilisé pour fournir de nouvelles données. NSTimer a été utilisé pour actualiser et mettre à jour les données lors du retour d'une action performSegueWithIdentifier. La minuterie était en cours d'activation, puis invalidée immédiatement après son utilisation au moment du retour. La MSMachError s'est arrêtée lorsque le chronomètre a été supprimé et - (void)viewWillAppear:(BOOL)animated et (void)viewDidAppear:(BOOL)animated ont été utilisés pour exécuter la même fonction. Cette erreur a commencé avec la mise à niveau vers Xcode 7. 

9
Patt

J'ai résolu ce problème en modifiant la valeur de Localization native development region clé en United Kingdom[ou toute région spécifique] à partir de sa valeur par défaut en présente dans info.plist de votre projet.

  1. Sélectionnez Project Navigator
  2. Localisez le fichier info.plist présent dans le dossier ProjectNameTests.
  3. Modifiez la valeur de Localization native development region key en une région spécifique par exemple. Royaume-Uni

 Step 1 and 2

 Step 3

6
Jayprakash Dubey

J'ai également rencontré le même problème dans un NSOperation fonctionnant sur un thread en arrière-plan et je rencontrais toujours cette erreur, car UIAlertController était toujours en train de se supprimer alors qu'une autre transaction d'interface utilisateur tentait de se produire. La modification de mon code à cette résolu le problème. 

defer { 
    dispatch_async( dispatch_get_main_queue(),{
        completion()
    }) 
}

Beaucoup de gens ne connaissent pas le différé. Il laisse la portée actuelle se terminer et s’exécute ensuite. Un peu chouette. 

4
Kellen Styler

J'ai rencontré la même erreur capacité invalide (20) et nom invalide (15). J'ai essayé les solutions mentionnées par d'autres telles que:

  • Localisation clé de la région de développement native dans info.plist
  • Modification des paramètres de dessin dans l'inspecteur d'attributs
  • Même modification du dictionnaire des exceptions ATS dans info.plist

Mais aucune de ces solutions n'a résolu mon problème… .. En fait, j'essayais de partager un document, mais générer un document prendrait un certain temps et je voulais afficher un UIActivityIndicatorView à l'utilisateur jusqu'au chargement du document.

La solution à mon erreur était la suivante:

//Create a alertView add UIActivityIndicatorView to it and present it in ViewController

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
//Call method 1 todo background process like getting data

dispatch_sync(dispatch_get_main_queue(), ^{
    //Call method 2 to update the UI
    [alert dismissViewControllerAnimated:YES completion:^(void){
        //My mistake was: I was calling method 2 over here to update the UI
        return;
    }];
});
});
4
1218GG

Changer la chaîne de localisation de en vers États-Unis a corrigé cela pour moi. Cependant, assurez-vous de nettoyer après avoir modifié Info.plist. J'ai remarqué que les mises à jour ne fonctionnent pas lorsque vous compilez après avoir modifié le plist  enter image description here

3
AlphaCodaSeven

Cette erreur a commencé à apparaître après que j'ai ajouté des observateurs:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.keyboardWillHideOrShow(_:)), name:UIKeyboardWillShowNotification, object: nil)

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.keyboardWillHideOrShow(_:)), name:UIKeyboardWillHideNotification, object: nil)

Le problème a disparu lorsque j'ai spécifié le nom de la classe au lieu de self:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MyClass.keyboardWillHideOrShow(_:)), name:UIKeyboardWillShowNotification, object: nil)

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MyClass.keyboardWillHideOrShow(_:)), name:UIKeyboardWillHideNotification, object: nil)
3
Fook

Dans mon cas, c'était Little Snitch, il bloquait automatiquement les URL.

2
Vaibhav Mishra

J'ai eu la même erreur et aucun de ce qui précède ne s'est appliqué à mon problème. Le problème est apparu lorsque j'ai enregistré mon contrôleur de vue en tant qu'observateur dans un changement d'orientation du périphérique, ce qui a permis de redimensionner les vues et de dessiner les dessins dans la vue en fonction de la nouvelle taille de la vue.

J'ai eu la sortie d'un viewGraph qui était une sous-classe de UIView dans laquelle j'ai dessiné des graphiques. En mode paysage, la taille du viewGraph est plus grande qu'en mode portrait. Ainsi, lorsque le périphérique change d'orientation, le speedGraph doit être redessiné.

Le problème était que j'ai ajouté plusieurs vues secondaires à la vue speedGraph, qui contenait des graphiques. Ces sous-vues devaient être redéfinies dans la vue speedGraph, puis redessinées. Une fois que le périphérique a changé d'orientation, j'ai de nouveau appelé viewDidAppear pour redéfinir la vue speedGraph et toutes ses sous-vues et les redessiner. L'appel de setNeedsDisplay pour speedGraph ne fonctionne pas avec les changements d'orientation et les sous-vues dans une vue.

Qu'est-ce que j'ai mal fait qui a provoqué l'erreur? Dans viewDidAppear, j'appelle une méthode qui effectue des calculs et ajoute les sous-vues à la vue speedGraph. Le problème était que ces sous-vues avaient été créées dans la méthode et ajoutées à la vue speedGraph dans cette méthode. Après avoir quitté la méthode, les références à ces sous-vues sont, bien sûr, supprimées, mais les sous-vues de la vue speedGraph restent, car elles sont ajoutées. Lorsque le périphérique change, les sous-vues sont à nouveau créées et ajoutées à la vue speedGraph, qui contient déjà ces sous-vues, mais ne trouve plus les références à ces sous-vues. Le tableau de sous-vues de la vue speedGraph devient de plus en plus long avec (je pense) des sous-vues pendantes.

J'ai résolu le problème en définissant les sous-vues qui seront ajoutées à la vue speedGraph en tant que propriété de classe, puis en effectuant ce qu'il fallait faire avec les vues de cette méthode. Avec ce changement, le problème avait disparu.

2
MacUserT

Puisque nous pouvons publier toutes les situations renvoyant la même erreur ici, je me suis senti libre de poster la mienne :). J'ai eu l'erreur quand j'ai changé les paramètres de confidentialité en arrière-plan. Mon application a ouvert l'application de configuration pour que l'utilisateur puisse lui accorder une autorisation d'accès à sa photothèque. Lorsque le commutateur d'autorisation est défini, l'application se bloque avec l'erreur modifiée:

_BSMachError: (os/kern) invalid capability (20)
_BSMachError: (os/kern) invalid name (15)

Cela semble être un redémarrage forcé de votre application par le système d'exploitation, car l'utilisateur a modifié les éléments auxquels votre application peut accéder. Donc, dans mon cas, c'est une action du système d'exploitation qui a causé l'erreur.

2
MQoder

Je pourrais reproduire l'erreur pour moi: Si je modifie déjà l'une des vues dans une vue que je ferme actuellement (popViewControllerAnimated), je reçois l'erreur.

Je subis une action UINavigationButton qui crée une tâche asynchrone (POSTRequest) . Avant d'exécuter cette demande, je règle l'indicateur customView de ce bouton sur un indicateur de progression . et réinitialiser la vue personnalisée de ce bouton . Après cela, je ferme la vue (popViewControllerAnimated).

C'est le code CORRECT où l'erreur n'apparaît pas:

/* right way, working without BSMachError */
@IBAction func sendRequest(sender: UIBarButtonItem) {
    /* setting the progress indicator as customView of the self.saveButton */
    self.showActivityIndicatory(self.saveButton)
    /* asynchronous REST call */
    UserDataManager.sharedInstance.requestFeedback(request, onCompletion: { error in
        dispatch_async(dispatch_get_main_queue(),{
        /* resetting the saveButton again to default by setting customView to nil */
        self.saveButton.customView = nil
        /* closing the view */
        self.navigationController!.popViewControllerAnimated(true)
      })
    })
}

L’erreur a été provoquée par le changement de ligne: fermeture de la vue, puis définition de la personnalisation sur nil:

/* WRONG way, causing BSMachError */
@IBAction func sendRequest(sender: UIBarButtonItem) {
    /* setting the progress indicator as customView of the self.saveButton */
    self.showActivityIndicatory(self.saveButton)
    /* asynchronous REST call */
    UserDataManager.sharedInstance.requestFeedback(request, onCompletion: { error in
        dispatch_async(dispatch_get_main_queue(),{
        /* closing the view */
        self.navigationController!.popViewControllerAnimated(true)
        /* resetting the saveButton again to default by setting customView to nil */
        self.saveButton.customView = nil
      })
    })
}
2
Miaumi

J'ai eu cette erreur de:

var promptsArr =  StartRegAlerts() //Instance of the class

etc

func textFieldDidBeginEditing(textField: UITextField) {     
    switch textField.tag {
            case 0:
                alert(promptsArr.prompts["Name"]!)
            case 1:
                alert(promptsArr.prompts["CellPhone"]!)
            case 4:
                alert2(promptsArr.prompts["NUMBERCORRECT"]!)
                //alert(promptsArr.prompts["Wait4Pin"]!)

            default: break
            }
It only occurred for case 0 but not the other cases:
As a work around for now I commented out case 0 and that stopped the error.
I then changed  calling promptsArr.prompts by:

créer un nouveau dictionnaire invite et: 

 override func viewDidAppear(animated: Bool) {
             Prompt = promptsArr.prompts //
      }

puis utilisé Invite dans mes appels d’alerte. Cela a résolu le problème.

Il semble donc que ce soit un problème de timing.

1
Jeremy

La raison pour laquelle certains développeurs ne reçoivent pas l'erreur est revenue après être passée de "États-Unis" à "en" (ou) autre région, c'est qu'il y a une différence entre les vues "Liste de propriétés" et "Code source". C'est probablement un bug Xcode. Chaque fois qu'il y a une discordance entre ces deux vues, cette erreur générera une erreur, qu'il s'agisse de "en" ou de "anglais". Si vous modifiez "en" ou "États-Unis" pour que les deux vues soient identiques, le problème sera résolu.

1
Nay

Pour ce que ça vaut - il semble que beaucoup de situations jettent cette erreur. Dans mon cas, j'avais posté une alerte lorsque l'utilisateur rejetait un formulaire de saisie de données et que les données étaient dans le formulaire. J'ai pu éliminer l'erreur en résiliant par programme le premier intervenant de tous les champs applicables avant de dérouler le contrôleur de vue.

1
user2698617

J'ai reçu le même message d'erreur, car je assign une propriété object comme @property (assign, nonatomic) NSNumber *aVariable;, corrigée en passant à strong.

1
Allen

Je suis un newb à cela alors prenez ceci pour ce qu'il vaut.

Ce qui a résolu le problème pour moi, c’était de changer les métriques simulées> Taille> en iPad plein écran. Tous mes points de vue, SAUF celui qui a lancé cette erreur, sont configurés en mode plein écran pour iPad. Quand j'ai changé, l'erreur est partie ...

1
user1045302

J'ai eu cette erreur lors du renvoi d'un popover via un délégué. Dans la méthode delegateMethod, j'ai déclenché un élément graphique GUI . Il a été corrigé.

[myPopoverView dismissViewControllerAnimated:YES completion:^{ //GUI-Stuff}];
1
Yedy

Je l'ai vu lorsque j'ai appuyé sur le bouton Home alors qu'une UIAlertController était affichée, ce qui a été ignoré lorsque j'ai relancé l'application. J'ai ajouté du code pour supprimer la UIAlertController dans la appDelegate:

func applicationWillResignActive(application: UIApplication) {
  window?.rootViewController?.dismissViewControllerAnimated(false, completion: nil)
}

et le message d'erreur a disparu.

1
emrys57

avec Xcode 8.1 et iOs 10, j'ai également fait face 

_BSMachError: (os/kern) capacité invalide (20)

_BSMachError: (os/kern) nom invalide (15)

essayez de remplacer UiTraiCollection var pour modifier au moment de l’exécution les classes iPad en tant que classes afin d’avoir deux dispositions d’interface différentes dans Portraid et Landscape. Cela a fonctionné sans aucun crash mais génère nos erreurs.

C'était le code "maliciuos":

override public var traitCollection: UITraitCollection {
    if UIDevice.currentDevice().userInterfaceIdiom == .Pad && UIDevice.currentDevice().orientation.isPortrait.boolValue {
        return UITraitCollection(traitsFromCollections:[UITraitCollection(horizontalSizeClass: .Compact), UITraitCollection(verticalSizeClass: .Regular)])
    }
    return super.traitCollection
}

Les erreurs ont disparu en utilisant override func viewWillTransition comme alternative pour détecter la rotation d'interface. 

J'espère que cela sera utile à quelqu'un

0
Swalsz

Dans mon cas, la cause de l'erreur était due au redimensionnement. Construit en IB. Tout ce qui peut changer la taille d'un champ de texte ou similaire, par exemple changer la longueur d'une ligne, peut conduire à cette erreur, je crois. Dans mon cas, je devais simplement ajuster la taille du champ de texte pour couvrir toutes les possibilités, de sorte qu'il ne soit pas nécessaire de redimensionner la zone et d'entrer en conflit avec autre chose.

0
Terence K