错误消息“ _BSMachError:(os / kern)无效功能(20)”


173

请注意,此错误消息的级别很低,因此在不同情况下会因不同原因而出现。如果您遇到的情况在以下答案之一中未提及,请考虑同时添加您的情况,因此对于可能引发此错误消息的各种情况,这可能是一个中心答案。

编辑2015年11月10日另请注意,我将自己的答案标记为答案,但这是在其他人发布之前的。我猜没有一个应该真正被标记为答案,因为正如我们现在在下面看到的那样……此错误并没有一个答案,因为它的级别太低了。

我在跑

  • iOS 9.0模拟器
  • XCode 7.0

昨天一切都很好。

今天,经过大量与旋转相关的工作之后,当我在模拟器中运行应用程序并对它进行旋转时,我开始在控制台输出中收到此错误。

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

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

该问题的屏幕截图 -我已经清除了我的构建文件夹,-我已经清除了派生数据文件夹,-我已经重置了模拟器。

我当时在和

  • UIViewController viewWillLayoutSubviews
  • UIViewController viewWillTransitionToSize:...

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

我还在UIView上创建了一个实用程序类别,在其中创建了一堆创建的方法,CGRect并帮助我将框架分配给视图。

根视图控制器

根视图控制器设置


我在使用BLE时遇到此错误
Nex Mishra 2015年

1
我还找不到解决方案,而且在旋转时也会得到解决方案。即使Xcode报告仅使用了少量的内存,有时我也会在不久后收到内存警告。令人沮丧
纳尔科

79
好想您修改了MyFoodTracker:P
Sam Soffes '16

8
为什么MyFoodTracker在屏幕截图中用红线划掉了?
玛丽安·塞尔尼

2
@LogicsaurusRex“这是什么意思?” 确实不是一个有用的问题,但是“是否需要修复?” 也许是一个更好的问题(我想要答案)。我的应用似乎可以正常运行,但显示此错误。我很想把它固定下来并修复它,但这不是一个小应用程序,发现它将花费我宝贵的时间。
vrwim

Answers:


144

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

将“ 本地化本地开发区域 ” 更改info.plist为美国(而非美国)en

已更新:然后您可以还原这些更改。


3
它也对我有用。然后,我将设置恢复为“ en”,错误似乎不再出现。
Skoua 2015年

它对我来说是发生此错误的新实例。我在此处发布了原始帖子,并且由于其中一个绘图复选框而收到此错误。它已经消失了很长时间,现在由于其他未知原因又开始出现,并且对此进行了更改实际上已经解决了它……真棒。
Logicsaurus Rex

我的ja不是en。我该怎么办?设置为Japan
Nicolas Miari

1
这工作了。但是恢复到重新连接,并没有错误😒
新Ighodaro

30
我真的不喜欢这样的答案。因为它什么也没解释。这是XCode上的错误吗?是我们的代码定位错误吗?或者是什么?
GeneCode

66

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

2
这为我消除了控制台错误,但是我试图修复的同时发生的主要锁定错误却无济于事
Jason 2015年

可以概括这个答案,我在uialertcontroller中执行segue时得到了我的答案(几乎相同的代码)。可能与Alertcontroller如何使自己脱颖而出有关。也解决了我的dispatch_async问题。
user3802077 2016年

同样的问题-特别是在9.2仿真器中,当我通过UIAlertController中的UIAlertAction处理程序从我的应用程序中进入系统设置时,就会发生这种情况。当我将代码重写为UIAlertController而不是旧的UIAlertView时,SIM卡抛出了相同的_BSMach错误(15,20)。在真实设备(ipad)上未发生。Dispatch_async确实使模拟器满意。绝对与UIAlertController有关。
Mike Kogan

同样的问题再次引起了人们的注意,这次不是在sim卡中,而是在ipad而不是sim卡上。这次是一些代码导致进入pdf上下文的视图导致了机器错误。再次dispatch_async修复了它。我还验证了在执行此代码而未从UIAlertController中的UIAlertAction的完成处理程序调用该代码时,不会发生此错误。在我的两种情况下,该错误仅在XCode调试控制台中可见,并且该应用程序继续正确执行。在该线程上建议的本地化想法都不会对这两种情况产生任何影响。
Mike Kogan

@Jason我遇到了同样的问题,它删除了控制台错误消息,但仍然崩溃。您设法解决了吗?
bp14

32

好的,我还没有完全确定下来,但这将为您提供99%的解决方案。我正在使用来自ESRI的第三方地图控件,关于它的某些内容与“属性”检查器中的其中一种绘图设置不一样。我没有单独尝试每个设置以查看它是哪个设置,但是当我将所有设置都关闭时(在红色框中),一切都像超级按钮一样工作,我退出了在控制台上获取错误消息的方法。如果有时间确定准确的设置或设置的组合,我将更新答案。

在此处输入图片说明


我认为您的回答很好。但是,我将删除顶部的粗体文本。最近,有很多匿名的不信任投票的答案,我怀疑这是否是私人的。
杰森·D

如果我必须使用其中之一怎么办?
Zaraki

15

这太疯狂了,但是对我来说,解决方案是仅删除发生错误的文件中的所有断点。

至于原因呢?我想我不小心按了快捷键在当前行中创建了一个断点。因为这是意料之外的,所以我再次按下了相同的快捷键将其删除。

哦,亲爱的XCode ...


这对我有用。这就是问题的一个线索是Xcode会在没有断点的行上中断。然后,在另一行上,我得到了_BSMachErrors。
Didge '16

12

我遇到了同样的错误...

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

我正在从 UIAlertAction

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

将块的执行推迟到下一个运行循环修复为止。

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

9

提供新数据时得到以下信息:

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

使用按钮提供新数据时发生错误。一种NSTimer用于在从返回刷新和更新数据performSegueWithIdentifier的操作。计时器已被激活,然后在返回时间使用后立即失效。的MSMachError-除去计时器时并停止(void)viewWillAppear:(BOOL)animated(void)viewDidAppear:(BOOL)animated被用来执行相同的功能。此错误始于升级到Xcode 7。


6

我得到了这个问题,通过改变的固定值的Localization native development region关键United Kingdom [或任何特定区域]的默认值en在本info.plist项目的。

  1. 选择 Project Navigator
  2. 定位 info.plist ProjectNameTests文件夹中存在的文件。
  3. 将的值更改Localization native development region key为任何特定区域,例如。英国

步骤1和2

第三步


是的,此修复程序听起来很疯狂,但可以。对我来说,该应用程序在Xcode 7.3.1部署到受限制的iPod touch第五代产品上时可以正常工作。但是,当第一次从Xcode部署到受限制的iPad Air时,我遇到了这个问题BSMachError。切换区域以United States使错误消失。另一个莫名其妙的Xcode之谜。
罗勒·布尔克

4

我还在后台线程上运行的NSOperation中也遇到了同样的问题,并且仍然出现此错误,因为在尝试进行另一个UI事务时,UIAlertController仍在删除自身。修改我的代码以解决此问题。

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

很多人不了解defer-它使当前范围完整,然后再运行。有点整洁。


4

我确实遇到了相同的错误,即无效功能(20)和无效名称(15)。我尝试了其他人提到的解决方案,例如:

  • info.plist中的本地化本机开发区域键
  • 在属性检查器中更改图形设置
  • 甚至在info.plist中更改了ATS异常字典

但是这些解决方案都不能解决我的问题。实际上,我试图共享一些文档,但是生成文档会花费一些时间,并且想要向用户显示UIActivityIndi​​catorView,直到文档加载时为止。

我的错误的解决方案是:

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

太好了,为我工作!重要的是要知道更新UI应该在dispatch_get_main_queue()中完成
MkaysWork'5

3

将本地化字符串从en更改为United States可以解决此问题。但是,请确保在更改Info.plist之后进行清洁。我注意到在进行plist更改后仅进行构建时,更新不起作用。在此处输入图片说明



2

我可以为我重现该错误:如果对我实际上已经关闭的View中的其中一个View进行了更改(popViewControllerAnimated),则会收到错误。

我正在执行一个异步任务(POSTRequest)的UINavigationButton动作。在执行此请求之前,我将该按钮的customView设置为进度指示器。从异步调用返回时,我调度到主线程并重置该按钮的customView。之后,我将关闭视图(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)
      })
    })
}

导致错误的原因是切换了行:关闭视图,然后将customView设置为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

在添加一些观察者后,此错误开始弹出:

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)

2

我有同样的错误,以上都不适用于我的问题。当我将视图控制器注册为设备方向更改的观察者时出现了问题,因此可以调整视图的大小,并可以根据视图的新大小来绘制视图中的图形。

我有一个viewGraph的出口,它是UIView的子类,在其中我绘制了一些图形。在横向模式下,viewGraph的大小大于在纵向模式下的大小。因此,当设备更改其方向时,需要重新绘制speedGraph。

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

我做错了什么导致错误出现。在viewDidAppear中,我调用了一个方法,该方法进行一些计算并将子视图添加到speedGraph视图中。问题在于这些子视图是在方法中创建的,并已添加到该方法中的speedGraph视图中。离开方法后,当然会删除对这些子视图的引用,但是由于已添加了speedGraph视图中的子视图,因此保留了这些子视图。当设备更改时,将再次创建子视图并将其添加到已经具有这些子视图的speedGraph视图中,但不再能找到对这些子视图的引用。speedGraph视图的子视图数组随着(我认为)悬垂的子视图而变得越来越长。

我通过定义将作为类属性添加到speedGraph视图的子视图解决了问题,然后对该方法中的视图进行了必要的处理。有了此更改,问题就消失了。


2

因为我们可以在这里发布所有返回相同错误的情况,所以我可以随意发布:)。在后台更改隐私设置时出现错误。我的应用程序打开了设置应用程序,因此用户可以将其权限授予其照相馆,设置了权限开关后,该应用程序将崩溃,并出现错误:

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

这似乎是操作系统强制重新启动您的应用程序,因为用户更改了您的应用程序可以访问的内容。因此,就我而言,导致错误的是操作系统的操作。


我也有这个 因此,这实际上不是错误。当应用程序未连接到Xcode时,不会发生任何令人恐惧的事情。谢谢兄弟,您可能只省了我几个小时的调试时间。
yuji

1

我收到了相同的错误消息,因为我assignobject属性@property (assign, nonatomic) NSNumber *aVariable;更改为固定为strong


1

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


这也是我遇到的问题,但是由于视图控制器被导航控制器的导航栏中的后退按钮关闭了,因此prepareForSegue()不会被调用,而且我也不知道在哪里辞职第一响应者。
TimSim

1

在显示Homea 的同时按下按钮时,我看到了这一点UIAlertController,当我重新启动该应用程序时,该按钮便被取消了。我添加了代码以消除UIAlertController中的appDelegate

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

并且错误消息消失了。


1

通过委托关闭弹出窗口时出现此错误。在委托方法中,我触发了一些GUI-Stuff。将GUI-Stuff放入dismissViewControllerAnimated的completeBlock中,对其进行了修复。

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

1

我对此很陌生,所以以它的价值为准。

解决此问题的方法是将“模拟指标”>“大小”>更改为“ iPad全屏”。除了引发此错误的一种观点外,我所有的观点都设为iPad全屏。当我更改它时,错误消失了……


1

从“ Unities States”更改为“ en”(或其他区域)后,某些开发人员没有得到错误的原因是,“ Property list”视图和“ Source code”视图之间存在差异。这可能是Xcode错误。每当这两个视图之间不匹配时,无论是“ en”还是“ English”,都将引发此错误。如果将两个视图都更改为“ zh”或“美国”,将解决此问题。


1

我收到以下错误消息:

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:

创建一个新的字典提示,并:

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

然后在我的提醒电话中使用提示。这解决了问题。

因此看来这是一个时间问题。


恐怕它只能工作一会儿,然后再出现-因此注释掉案例1,然后再调用该警报似乎已经解决了该问题。
杰里米(Jeremy)2016年

0

我也遇到过Xcode 8.1和iOs 10

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

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

尝试覆盖UiTraiCollection变量以在运行时更改iPad的size类,使其在Portraid和Landscape中具有两种不同的界面布局。它工作正常,没有崩溃,但是会产生错误。

这是“ 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
}

错误不再override func viewWillTransition用作检测接口旋转的替代方法。

我希望这对某人有用


0

在我的情况下,错误的原因是由于调整大小。内置IB。我相信任何可以更改文本字段大小或类似内容(例如更改行长)的东西都可能导致此错误。以我为例,我只需要调整文本字段的大小即可涵盖所有可能性,因此无需调整框的大小并与其他内容冲突。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.