Mensaje de error '_BSMachError: (os / kern) capacidad no válida (20)'

173

Tenga en cuenta que este mensaje de error es de nivel bastante bajo, por lo que surge por diferentes razones en diferentes escenarios. Si tiene un escenario que no se menciona en una de las respuestas a continuación, considere agregar su situación también, por lo que tal vez esta podría ser una respuesta central para varias situaciones que generan este mensaje de error.

Editar 10 de noviembre de 2015 También tenga en cuenta que marqué mi propia respuesta como la respuesta, pero eso fue antes de que alguien más hubiera publicado. Supongo que ninguno debería ser marcado como la respuesta, porque como hemos visto a continuación ... este error no tiene una sola respuesta porque es de nivel muy bajo.

Estoy corriendo

  • Simulador de iOS 9.0
  • XCode 7.0

Todo estaba funcionando bien ayer.

Hoy, después de un montón de trabajo en cosas relacionadas con la rotación, comencé a recibir este error en la salida de mi consola cuando ejecuto la aplicación en el Simulador y la giro.

_BSMachError: (os / kern) capacidad no válida (20)

_BSMachError: (os / kern) nombre no válido (15)

Captura de pantalla para este problema - He borrado mi carpeta de compilación, - He limpiado la carpeta de datos derivados, - He reiniciado el simulador.

Estaba trabajando con

  • UIViewController viewWillLayoutSubviews
  • UIViewController viewWillTransitionToSize:...

También estaba comprobando varias configuraciones de 'Dibujo' en el Inspector de Atributos en IB.

También hice una categoría de utilidad en UIView donde creé un montón de métodos que crean CGRecty me ayudan a asignar marcos a las vistas.

Controlador de vista de raíz

Configuración del controlador de vista raíz

Logicsaurus Rex
fuente
Recibo este error mientras trabajo en BLE
Nex Mishra
1
Todavía no puedo encontrar una solución, y también la obtengo mientras roto. También recibo una advertencia de memoria poco después, a veces, aunque Xcode informa que solo se está utilizando una pequeña cantidad de memoria. Frustrante.
narco
79
Bueno, creo que redactó MyFoodTracker: P
Sam Soffes
8
¿Por qué se tacha el MyFoodTracker con una línea roja en la captura de pantalla?
Marián Černý
2
@LogicsaurusRex "¿Qué significa?" de hecho, no es una pregunta útil, pero "¿Necesita solución?" es quizás una mejor pregunta (a la que me gustaría la respuesta). Parece que mi aplicación funciona bien pero muestra este error. Me encantaría fijarlo y arreglarlo, pero esta no es una aplicación pequeña y encontrarla me costaría un tiempo precioso.
vrwim

Respuestas:

144

Basado en https://forums.developer.apple.com/thread/15683 :

Cambie " Región de desarrollo nativo de localización " info.plista Estados Unidos en lugar de en.

Actualizado: entonces puede revertir estos cambios.

blacharnia
fuente
3
A mí también me funcionó. Luego revertí la configuración a "en" y el error parece no volver.
Skoua
Funcionó para mí como una NUEVA instancia de este error. Publiqué la publicación original aquí y recibí este error debido a una de las casillas de dibujo. Había desaparecido durante mucho tiempo, y ahora comenzó a surgir nuevamente por alguna otra razón desconocida, y cambiar esto en realidad lo solucionó ... VACA SANTA, eso es increíble.
Logicsaurus Rex
El mío está configurado para ja, no en. ¿Qué tengo que hacer? ¿Establecerlo en Japan?
Nicolas Miari
1
Esto funcionó. Sin embargo, volvió de nuevo a en y no hubo error 😒
Neo Ighodaro
30
Realmente no me gustan las respuestas como esta. Porque no explica nada. ¿Es un error en XCode? ¿Es nuestro posicionamiento de código incorrecto? ¿O que?
GeneCode
66

También me topé con los _BSMachErrorerrores de la consola mientras hacía un enlace profundo a la aplicación Configuración en iOS 9 desde una UIAlertControlleracción. A dispatch_asyncresuelto mi problema:

[aAlertVC addAction:[UIAlertAction actionWithTitle:@"Settings" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
    dispatch_async(dispatch_get_main_queue(), ^{
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
    });
}]];
19 Craig
fuente
2
Esto eliminó el error de la consola para mí, pero el error de bloqueo principal que estaba tratando de solucionar que ocurre al mismo tiempo no fue ayudado
Jason
Probablemente pueda generalizar esta respuesta, obtuve la mía mientras realizaba segue en un controlador uialert (casi el mismo código). Probablemente tiene que ver con cómo el controlador de alerta se sale de la imagen. Resolvió mi problema con dispatch_async también.
user3802077
mismo problema aquí: específicamente, esto ocurre en el simulador 9.2 cuando voy a la configuración del sistema desde mi aplicación a través del controlador para UIAlertAction desde UIAlertController. Cuando reescribí el código en UIAlertController en lugar del antiguo UIAlertView, el sim arrojó los mismos errores _BSMach (15,20). No ocurrió en el dispositivo real (ipad). Dispatch_async hizo feliz al simulador. Definitivamente está relacionado con UIAlertController.
Mike Kogan
El mismo problema volvió a surgir, esta vez no en el sim, sino en un ipad y NO en el sim. Esta vez, fue un código el que generó una vista en un contexto pdf que causó los macherrors. De nuevo dispatch_async lo arregló. También verifiqué que cuando este código se ejecuta sin ser invocado desde el controlador de finalización de una UIAlertAction en un UIAlertController, este error no ocurre. En ambos casos, el error solo era visible en la consola de depuración de XCode y la aplicación continuó ejecutándose correctamente. Ninguna de las ideas de localización sugeridas en este hilo tuvo ningún impacto en ninguno de los escenarios.
Mike Kogan
@ Jason Tuve el mismo problema, eliminó el mensaje de error de la consola, pero aún se bloquea. ¿Lograste resolverlo de alguna manera?
bp14
32

Ok, no lo he anclado por completo, pero esto te llevará al 99% del camino. Estoy usando un control de mapa de terceros de ESRI, y algo al respecto no le gusta una de estas configuraciones de dibujo en el Inspector de atributos. No he probado cada configuración individualmente para ver qué configuración es, pero cuando las apagué todas (en el cuadro rojo), todo funcionó de maravilla, y dejé de recibir el mensaje de error anterior en la consola. Si tengo tiempo de precisar la configuración precisa o la combinación de configuraciones, actualizaré la respuesta.

ingrese la descripción de la imagen aquí

Logicsaurus Rex
fuente
Creo que tu respuesta es bastante buena. Sin embargo, eliminaría el texto en negrita en la parte superior. Últimamente ha habido muchos votos negativos anónimos de respuestas, dudo que sea algo personal.
Jason D
¿Qué pasa si tengo que usar uno de estos?
Zaraki
15

Es una locura, pero para mí la solución fue simplemente eliminar todos los puntos de interrupción en el archivo donde ocurrió el error.

¿En cuanto a la causa? Creo que accidentalmente presioné una tecla de acceso directo para crear un punto de interrupción en la línea actual. Debido a que no fue intencional, presioné la misma tecla de acceso directo nuevamente para eliminarlo.

Oh mi querido XCode ...

agro1986
fuente
Esto funcionó para mí. Una pista de que este era el problema era que Xcode se rompería en líneas que no tenían un punto de interrupción. Luego, en una línea diferente, obtuve los _BSMachErrors anteriores.
didge
12

Estaba recibiendo los mismos errores ...

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

Estaba llamando a openURL () desde un UIAlertAction

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

Aplazando la ejecución del bloque hasta que el siguiente ciclo de ejecución lo arregle ...

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

Estaba obteniendo lo siguiente al proporcionar nuevos datos:

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

El error ocurrió cuando se usó un botón para suministrar datos nuevos. Se NSTimerusó un para actualizar y actualizar datos al regresar de una performSegueWithIdentifieracción. El temporizador se activaba y luego se invalidaba inmediatamente después de su uso en el momento de devolución. Se MSMachErrordetuvieron cuando se quitó el temporizador y - (void)viewWillAppear:(BOOL)animatedy (void)viewDidAppear:(BOOL)animatedse emplearon para realizar la misma función. Este error comenzó con la actualización a Xcode 7.

Patt
fuente
6

Este problema se solucionó cambiando el valor de la Localization native development regionclave a United Kingdom [o cualquier región específica] de su valor predeterminado enpresente en info.plistsu proyecto.

  1. Seleccione Project Navigator
  2. Busque el info.plistarchivo presente en la carpeta ProjectNameTests.
  3. Cambiar el valor de Localization native development region keya cualquier región específica, por ejemplo. Reino Unido

Paso 1 y 2

Paso 3

Jayprakash Dubey
fuente
Sí, esta solución suena loca, pero funciona. Para mí, la aplicación funcionó cuando Xcode 7.3.1 se implementó en un iPod touch de 5ta generación. Pero cuando se implementó por primera vez desde Xcode a un iPad Air atado, me encontré con esto BSMachError. Cambiando la región para que United Statesel error desaparezca. Otro misterio inexplicable de Xcode.
Basil Bourque
4

También me encontré con el mismo problema en una operación NSO que se ejecutaba en un subproceso en segundo plano y todavía recibía este error porque un UIAlertController todavía se eliminaba a sí mismo mientras otra transacción de IU intentaba tener lugar. Modificar mi código a esto solucionó el problema.

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

Mucha gente no sabe acerca de diferir: permite completar el alcance actual y luego se ejecuta después. Un poco ordenado

Kellen Styler
fuente
4

Me enfrenté al mismo error de capacidad no válida (20) y nombre no válido (15). Probé las soluciones mencionadas por otros como:

  • La clave de región de desarrollo nativo de localización en info.plist
  • Cambiar la configuración de dibujo en el Inspector de atributos
  • Incluso se modificó el Diccionario de excepciones ATS en info.plist

Pero ninguna de esas soluciones resolvió mi problema. En realidad, estaba tratando de compartir algún documento, pero generar el documento llevaría algún tiempo y quería mostrar un UIActivityIndicatorView al usuario hasta que se cargue el documento.

La solución para mi error fue:

//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;
    }];
});
});
1218GG
fuente
Excelente, funcionó para mí! Es importante saber que la actualización de la interfaz de usuario debe realizarse en dispatch_get_main_queue ()
MkaysWork
3

Cambiar la cadena de localización de en a Estados Unidos me arregló esto. Sin embargo, asegúrese de limpiar después de cambiar Info.plist. Me di cuenta de que las actualizaciones no funcionan cuando solo construyes después de hacer cambios de plist.ingrese la descripción de la imagen aquí

AlphaCodaSeven
fuente
2

En mi caso era Little Snitch, estaba bloqueando las URL automáticamente.

Vaibhav Mishra
fuente
2

Podría reproducir el error por mí: si realizo cambios en una de las Vistas dentro de una Vista que ya estoy cerrando (popViewControllerAnimated), recibo el error.

Estoy teniendo una acción UINavigationButton que realiza una tarea asincrónica (POSTRequest). Antes de realizar esta solicitud, configuré la vista personalizada de ese botón en un indicador de progreso. Al regresar de la llamada asincrónica, despacho al hilo principal y restablezco la vista personalizada de ese botón. Después de eso, estoy cerrando la vista (popViewControllerAnimated).

Este es el código CORRECTO donde el error no aparece:

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

Lo que causó el error fue cambiar de línea: cerrar la vista y luego configurar customView en 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
      })
    })
}
Miaumi
fuente
2

Este error comenzó a aparecer después de agregar algunos observadores:

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

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

El problema desapareció cuando especifiqué el nombre de la clase en lugar 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)
Fook
fuente
2

Tuve el mismo error y ninguno de los anteriores se aplicó a mi problema. El problema apareció cuando registré mi controlador de vista como observador de un cambio de orientación del dispositivo, por lo que las vistas podían redimensionarse y los dibujos en la vista podían hacerse de acuerdo con el nuevo tamaño de la vista.

Tenía una salida de viewGraph, que era una subclase de UIView en la que dibujaba algunos gráficos. En modo horizontal, el tamaño de viewGraph es mayor que en modo vertical. Entonces, cuando el dispositivo cambia su orientación, se debe volver a dibujar el speedGraph.

El problema era que agregué varias subvistas a la vista de SpeedGraph, que contenía gráficos. Estas subvistas debían presentarse nuevamente en la vista de SpeedGraph y luego volverse a dibujar. Después de que el dispositivo cambió su orientación, llamé a viewDidAppear nuevamente para hacer que la vista speedGraph y todas sus subvistas se presentaran de nuevo y se volvieran a dibujar. Llamar a setNeedsDisplay para speedGraph no funciona con cambios de orientación y subvistas en una vista.

¿Qué hice mal que causó la aparición del error? En viewDidAppear, llamo a un método que hace algunos cálculos y agrega las subvistas a la vista speedGraph. El problema era que estas subvistas se crearon en el método y se agregaron a la vista speedGraph en este método. Después de abandonar el método, las referencias a estas subvistas, por supuesto, se eliminan, pero las subvistas en la vista speedGraph permanecen, ya que se agregan. Cuando el dispositivo cambia, las subvistas se crean nuevamente y se agregan a la vista speedGraph, que ya tiene estas subvistas, pero ya no puede encontrar las referencias a estas subvistas. La variedad de subvistas de la vista speedGraph se alarga cada vez más con (creo) subvistas colgantes.

Resolví el problema definiendo las subvistas que se agregarán a la vista speedGraph como una propiedad de clase y luego haré lo que sea necesario hacer con las vistas dentro de este método. Con este cambio, el problema desapareció.

MacUserT
fuente
2

Como podemos publicar todas las situaciones que devuelven el mismo error aquí, me sentí libre de publicar el mío :). Recibí el error cuando cambié la configuración de privacidad en segundo plano. Mi aplicación abrió la aplicación de configuración para que el usuario pueda otorgarle permiso a su fotolibrary, cuando se establece el interruptor de permiso, la aplicación se bloquea con el error medido:

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

Esto parece ser un reinicio forzado de su aplicación por parte del sistema operativo, porque el usuario cambió lo que su aplicación puede acceder. Entonces, en mi caso, fue una acción del sistema operativo quien causó el error.

MQoder
fuente
Yo también tengo este. Entonces esto no es realmente un error. Cuando la aplicación no está conectada a Xcode, no sucederá nada aterrador. Gracias hermano, podrías ahorrar horas de mi tiempo de depuración.
Yuji
1

Recibí el mismo mensaje de error, porque tengo assignuna objectpropiedad como @property (assign, nonatomic) NSNumber *aVariable;, arreglada al cambiar a strong.

Allen
fuente
1

Por lo que vale, parece que muchas situaciones arrojan este error. En mi caso, había publicado una alerta cuando el usuario estaba rechazando un formulario de entrada de datos y los datos estaban en el formulario. Pude eliminar el error al renunciar programáticamente al primer respondedor de todos los campos aplicables antes de desenrollar el controlador de vista.

usuario2698617
fuente
Este es el problema que tengo también, pero como el botón de retroceso de la barra de navegación del controlador de navegación descarta el controlador de vista, prepareForSegue()no me llaman y no sé dónde renunciar al primer respondedor.
TimSim
1

Vi esto cuando presioné el Homebotón mientras UIAlertControllerse mostraba a, lo cual fue descartado cuando relancé la aplicación. Agregué código para descartar el UIAlertControlleren appDelegate:

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

y el mensaje de error desapareció.

emrys57
fuente
1

Tuve este error al descartar un popover a través de delegado. En delegateMethod, activé algunas cosas de GUI. Poner el GUI-Stuff en la terminación Bloqueo de despedirViewControllerAnimated lo arregló.

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

Soy un novato en esto, así que tómalo por lo que vale.

Lo que solucionó esto para mí fue cambiar las métricas simuladas> Tamaño> a pantalla completa de iPad. Todos mis puntos de vista, EXCEPTO el que arrojó este error, lo configuramos en iPad Pantalla completa. Cuando lo cambié, el error desapareció ...

usuario1045302
fuente
1

La razón por la que algunos desarrolladores no obtienen el error regresó después de cambiar de "Estados Unidos" a "en" (u) otra región, es que existe una discrepancia entre las vistas de "Lista de propiedades" y "Código fuente". Probablemente sea un error de Xcode. Siempre que haya una falta de coincidencia entre estas dos vistas, se generará este error, sea lo que sea "en" o "inglés". Si ha cambiado a "en" o "Estados Unidos" para que ambas vistas sean iguales, solucionará el problema.

No
fuente
1

Recibí este error 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:

creando un nuevo indicador de diccionario y:

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

y luego usé prompt en mis llamadas de alerta. Eso solucionó el problema.

Entonces parece que es un problema de tiempo.

Jeremy
fuente
Me temo que solo funcionó por un tiempo y luego reapareció, por lo que comentar el caso 1 y luego llamar a esa alerta más tarde parece haber resuelto el problema.
Jeremy
0

con Xcode 8.1 y iOs 10 también me enfrenté

_BSMachError: (os / kern) capacidad no válida (20)

_BSMachError: (os / kern) nombre no válido (15)

tratando de anular UiTraiCollection var para cambiar en tiempo de ejecución las clases de iPad'size para tener dos diseños de interfaz diferentes en Portraid y Landscape. Funcionó sin ningún bloqueo, pero generó nuestros errores.

Este fue el código "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
}

Los errores desaparecieron usando override func viewWillTransitioncomo alternativa para detectar la rotación de la interfaz.

Espero que esto sea útil para alguien

Swalsz
fuente
0

En mi caso, la causa del error se debió al cambio de tamaño. Construido en IB. Creo que cualquier cosa que pueda cambiar el tamaño de un campo de texto o similar, por ejemplo, cambiar la longitud de la línea, puede conducir a este error. En mi caso, simplemente tuve que ajustar el tamaño del campo de texto para cubrir todas las posibilidades para que no sea necesario cambiar el tamaño del cuadro y entrar en conflicto con otra cosa.

Terence K
fuente