错误消息'_BSMachError:(os / kern)invalid capability(20)'

请注意,这个错误信息是相当低的水平,所以它在不同的情况下出现不同的原因。 如果您有下面的答案中没有提到的情况,请考虑添加您的情况,所以也许这可能是引发此错误消息的各种情况的中心答案。

编辑2015年11月10日另外请注意,我标记自己的答案作为答案,但那是在别人之前发布。 我想没有人真的被标记为答案,因为正如我们现在看到的…这个错误并不只是一个答案,因为它是如此之低的水平。

我在跑

  • iOS 9.0模拟器
  • XCode 7.0

昨天一切正常。

今天,在旋转相关的一堆工作后,我开始在我的控制台输出中得到这个错误,当我在模拟器中运行的应用程序,我旋转它。

_BSMachError:(os / kern)无效能力(20)

_BSMachError:(os / kern)无效名称(15)

这个问题的屏幕截图 – 我已经清除了我的生成文件夹, – 我清理了派生的数据文件夹, – 我已经重置模拟器。

我正在合作

  • UIViewController viewWillLayoutSubviews
  • UIViewController viewWillTransitionToSize:...

我还在IB中检查属性检查器上的各种“绘图”设置。

我也在UIView上创build了一个实用类,我创build了一些创buildCGRect的方法,并帮助我将框架分配给视图。

根视图控制器

根视图控制器设置

基于https://forums.developer.apple.com/thread/15683

info.plistLocalization native development region ”改为美国而不是en

更新:然后你可以恢复这些变化。

我还遇到了_BSMachError控制台错误,同时通过UIAlertController操作深入链接到iOS 9上的设置应用程序。 dispatch_async解决了我的问题:

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

好吧,我没有把它完全固定下来,但是这样可以让你达到99%。 我正在使用ESRI提供的第三方地图控件,关于它的一些内容不像Attributes Inspector中的一个绘图设置。 我没有单独尝试每个设置,看看它是哪个设置,但是当我把它们都关掉(在红色框中)时,一切都像魅力一样,我不再在控制台上面得到上面的错误信息。 如果当我有时间来确定设定或组合的设定,我会更新答案。

在这里输入图像说明

这很疯狂,但对我来说,解决scheme只是删除文件中发生错误的所有断点。

至于原因? 我想我不小心打了一个快捷键,在当前行中创build一个断点。 因为这是无意的,我再次点击相同的快捷键删除它。

哦,亲爱的XCode …

我得到了同样的错误…

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

我从UIAlertAction调用openURL()

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

推迟块的执行,直到下一个运行循环固定它…

 alert.addAction(UIAlertAction(title: actionTitle, style: .Default) { (action) in NSOperationQueue.mainQueue().addOperationWithBlock({ UIApplication.sharedApplication().openURL(url) }) }) 

提供新数据时,我得到以下内容:

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

使用button提供新数据时发生错误。 NSTimerperformSegueWithIdentifier操作返回时用于刷新和更新数据。 计时器在使用后立即被激活,然后在返回时立即失效。 当定时器被移除时MSMachError停止,并且使用 – (void)viewWillAppear:(BOOL)animated(void)viewDidAppear:(BOOL)animated执行相同的function。 这个错误从升级到Xcode 7开始。

我通过将United Kingdom [或任何特定区域]Localization native development region键的值从您的项目的info.plist的默认值更改来解决此问题。

  1. selectProject Navigator
  2. findProjectNameTests文件夹中的info.plist文件。
  3. Localization native development region key值更改为任何特定区域,例如。 英国

步骤1和2

第3步

我也遇到了在后台线程上运行的NSOperation中的同样的问题,我仍然得到这个错误,因为一个UIAlertController仍然是另一个UI事务试图发生自己删除自己。 修改我的代码来解决这个问题。

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

很多人不知道延迟 – 它让当前范围完成,然后运行。 有点整齐。

我确实面对同样的错误无效能力(20)和无效名称(15)。 我尝试了其他人提到的解决scheme,例如:

  • 本地化本地化开发地区的关键在info.plist
  • 在“属性”检查器中更改graphics设置
  • 甚至在info.plist中更改了ATSexception字典

但是这些解决scheme都没有解决我的问题。 其实,我试图共享一些文件,但生成文件需要一些时间,并希望显示一个UIActivityIndi​​catorView到用户,直到时间文件加载。

我的错误的解决scheme是:

 //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; }]; }); }); 

我添加了一些观察者后,这个错误开始popup:

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

当我指定类名而不是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) 

更改本地化string从EN到美国为我解决这个问题。 但是,请确保在更改Info.plist后进行清理。 我注意到,更新不起作用,当你只是build立plist更改后build立。 在这里输入图像说明

在我的情况下,它是小stream氓,它自动阻止url。

我可以为我重现错误:如果一个视图中的一个视图,我实际上已经closures(popViewControllerAnimated)更改一个视图我收到错误。

我有一个UINavigationButton行动,使asynchronous任务(POSTRequest)。 在执行此请求之前,我将该button的customView设置为进度指示器。 当从asynchronous调用返回时,我派遣到主线程并重置该button的customView。 之后,我正在closures视图(popViewControllerAnimated)。

这是错误不会出现的正确的代码:

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

造成错误的原因是切换线:closures视图,然后将customView设置为零:

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

我有同样的错误,没有上述适用于我的问题。 当我将视图控制器注册为设备方向更改的观察者时,问题就出现了,所以可以调整视图的大小,并根据视图的新大小制作视图中的graphics。

我有一个viewGraph的出口,它是UIView的一个子类,我绘制了一些graphics。在横向模式下,viewGraph的大小大于纵向模式。 所以当设备改变方向时,需要重新绘制speedGraph。

问题是,我添加了包含graphics的speedGraph视图的几个子视图。 这些子视图需要在speedGraph视图中重新进行布局,然后重新绘制。 在设备改变方向后,我再次调用viewDidAppear来使speedGraph视图及其所有子视图重新布局并重新绘制。 调用setNeedsDisplay for speedGraph不适用于视图中的方向更改和子视图。

我做了什么错误,导致错误出现。 在viewDidAppear中,我调用了一个计算方法,并将子视图添加到speedGraph视图中。 问题在于这些子视图是在方法中创build的,并被添加到此方法的speedGraph视图中。 在离开方法之后,当然会删除对这些子视图的引用,但是speedGraph视图中的子视图仍然存在,因为它们被添加。 当设备改变时,子视图被再次创build并添加到已经具有这些子视图的speedGraph视图中,但是不能再find对这些子视图的引用。 speedGraph视图的子视图数组越来越长(我认为)悬挂子视图。

我通过定义将作为类属性添加到speedGraph视图中的子视图来解决这个问题,然后在该方法内部执行需要完成的视图。 有了这个改变,问题就没有了。

一些开发者没有得到这个错误的原因是从“Unites States”转换到“en”(或者)其他地区,是否在“Property list”和“Source code”视图之间存在差异。 这可能是Xcode的错误。 只要这两个视图之间有不匹配,就会抛出这个错误,无论是“en”还是“English”。 如果您更改为“en”或“美国”这两个意见是相同的,将解决这个问题。

因为我们可以在这里发布所有返回相同错误的情况,所以我觉得可以发布我的:)。 我在后台更改隐私设置时出现错误。 我的应用程序打开设置应用程序,以便用户可以授予它的photolibrary的权限,当权限开关设置时,应用程序崩溃的大小错误:

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

这似乎是由操作系统强制重新启动您的应用程序,因为用户更改了您的应用程序可以访问的内容。 所以在我的情况下,这是造成错误的操作系统的行为。

我得到了同样的错误信息,因为我assign了一个object属性,像@property (assign, nonatomic) NSNumber *aVariable; ,通过变strong来固定。

对于它的价值 – 似乎很多情况下都会抛出这个错误。 就我而言,当用户解雇一个数据input表单并且数据在表单中时,我发布了一个警报。 我可以通过在展开视图控制器之前以编程方式从所有适用字段中退出第一个响应者来消除错误。

当我在显示UIAlertController时候按下了Homebutton的时候,我看到了这个,当我重新启动应用程序的时候就被解散了。 我添加了代码来closuresUIAlertController中的UIAlertController

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

并且错误信息消失了。

当通过委托解散popover时,我有这个错误。 在委托方法我触发了一些graphics用户界面的东西。 将GUI-Stuff放置在dismissViewControllerAnimated的completionBlock中。

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

我是一个新手,所以拿这个是值得的。

什么解决这个问题是改变模拟指标>大小> iPad的全屏幕。 我所有的观点,除了抛出这个错误,我们设置为iPad的全屏。 当我改变它,错误消失了…

我从这个错误:

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

等等

 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: 

创build一个新的字典提示和:

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

然后在我的警报呼叫中使用提示。 这解决了这个问题。

所以这似乎是一个时间问题。

与Xcode 8.1和IO 10我也面临

_BSMachError:(os / kern)无效能力(20)

_BSMachError:(os / kern)无效名称(15)

试图覆盖UiTraiCollection var在运行时更改iPad的大小类在Portraid和Landscape中有两个不同的界面布局。 它工作没有任何崩溃,但产生我们的错误。

这是“苹果”代码:

 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 } 

使用override func viewWillTransition的错误作为检测界面旋转的替代方法。

我希望这对某个人有用