Error message '_BSMachError: (os/kern) invalid capability (20)'

Error message '_BSMachError: (os/kern) invalid capability (20)'

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

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

我运行宁

昨天一切正常。

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

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

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

- 我已经清除了我的构建文件夹, - 我已经清理了派生数据文件夹, - 我已经重置了模拟器。

我正在与

一起工作

我还在 IB 的属性检查器上检查各种 'Drawing' 设置。

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

好的,我还没有完全确定,但这会让你完成 99% 的事情。 我正在使用来自 ESRI 的第三方地图控件,它的某些方面不喜欢属性检查器中的这些绘图设置之一。我没有单独尝试每个设置来查看它是哪个设置,但是当我关闭所有设置时(在红色框中),一切都像一个魅力,我停止在控制台中收到上面的错误消息。如果我有时间确定精确的设置或设置组合,我会更新答案。

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

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

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

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

info.plist 中的“本地化原生开发区域”更改为美国而不是 en

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

我得到了同样的错误消息,因为我 assign 一个 object 属性 就像 @property (assign, nonatomic) NSNumber *aVariable;,通过更改为 strong.[=14 来修复=]

在 iOS 9 从 UIAlertController 操作深度链接到设置应用程序时,我也 运行 进入了 _BSMachError 控制台错误。 dispatch_async 解决了我的问题:

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

在我的例子中是 Little Snitch,它会自动阻止 url。

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

我正在执行一个 UINavigationButton 操作,该操作执行一个异步任务 (POSTRequest)。 在执行此请求之前,我将该按钮的 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
      })
    })
}

我也在后台线程的 NSOperation 运行 中 运行 遇到了同样的问题,但我仍然收到此错误,因为 UIAlertController 仍在将其自身作为另一个 UI t运行saction 正试图发生。为此修改我的代码解决了这个问题。

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

很多人不知道 defer - 它让当前作用域完成,然后再运行。有点整洁。

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

  1. Select Project Navigator
  2. 在 ProjectNameTests 文件夹中找到 info.plist 文件。
  3. Localization native development region key 的值更改为任何特定区域 例如。 英国

物有所值 - 似乎很多情况下都会抛出此错误。在我的例子中,当用户关闭数据输入表单并且数据在表单中时,我发布了一个警告。我能够通过在展开视图控制器之前以编程方式从所有适用字段中退出第一响应者来消除错误。

我在显示 UIAlertController 时按下 Home 按钮时看到了这个,当我重新启动应用程序时它被取消了。我添加了代码以关闭 appDelegate:

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

然后错误消息消失了。

某些开发人员在从 "Unites States" 更改为 "en"(或)其他区域后没有收到错误的原因是 "Property list" 和 "Source code" 浏览量。这可能是 Xcode 错误。每当这两个视图之间存在不匹配时,无论是 "en" 还是 "English",都会抛出此错误。如果您更改为 "en" 或 "United States" 以使两个视图相同,将解决此问题。

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

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

但是 none 这些解决方案解决了我的问题。 实际上,我试图共享一些文档,但生成文档需要一些时间,并且想在文档加载之前向用户显示 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;
    }];
});
});

我在通过委托关闭弹出窗口时遇到了这个错误。在 delegateMethod 中,我触发了一些 GUI-Stuff。 将 GUI-Stuff 放在 dismissViewControllerAnimated 的 completionBlock 中修复了它。

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

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

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

我从 UIAlertAction

调用 openURL()
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)}
 }

我是这方面的新手,所以物有所值。

为我解决此问题的方法是将模拟指标 > 大小 > 更改为 iPad 全屏。除了引发此错误的视图外,我所有的视图都设置为 iPad 全屏。当我更改它时,错误消失了...

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

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

亲爱的XCode...

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

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

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

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

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

我有一个 viewGraph 的出口,它是 UIView 的子class,我在其中绘制了一些 graphics.In 横向模式,viewGraph 的大小比纵向模式大。因此,当设备改变其方向时,需要重新绘制 speedGraph。

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

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

我通过将要添加到 speedGraph 视图的子视图定义为 class 属性 解决了这个问题,然后在此方法中对视图执行需要完成的操作。通过此更改,问题消失了。

将本地化字符串从 en 更改为 United States 为我解决了这个问题。但是,请确保在更改 Info.plist 后进行清理。我注意到,当您在对 plist 进行更改后才构建时,更新不起作用。

我从以下位置收到此错误:

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

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

看来是时间问题。

因为我们可以 post 所有情况都在这里返回相同的错误,所以我可以 post 我的 :)。当我在后台更改隐私设置时出现错误。我的应用程序打开了设置应用程序,因此用户可以授予它对其照片库的权限,设置权限开关后,应用程序崩溃并出现错误:

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

这似乎是 OS 强制重启您的应用,因为用户更改了您的应用可以访问的内容。所以在我的例子中,这是导致错误的 OS 的行为。

with Xcode 8.1 and iOs 10 我也遇到了

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

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

尝试覆盖 UiTraiCollection var 以在运行时更改 iPad 的大小 类 以在纵向和横向中具有两种不同的界面布局。它没有任何崩溃但产生了我们的错误。

这是 "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 作为检测界面旋转的替代方法时,错误消失了。

我希望这对某人有用

在我的例子中,错误的原因是调整大小。内置IB。我相信任何可以改变文本字段大小或类似内容的东西(例如改变行长度)都可能导致此错误。在我的例子中,我只需要调整文本字段的大小以涵盖所有可能性,这样它就不需要调整框的大小并与其他东西发生冲突。