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

问题描述 投票:170回答:24

请注意,此错误消息的级别相当低,因此在不同的方案中出现不同的原因。如果您的某个场景未在下面的其中一个答案中提及,请考虑添加您的情况,因此这可能是引发此错误消息的各种情况的核心答案。

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

我在跑

  • iOS 9.0模拟器
  • XCode 7.0

昨天一切都很好。

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

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

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

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

我正在和我一起工作

  • UIViewController viewWillLayoutSubviews
  • UIViewController viewWillTransitionToSize:...

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

我还在UIView上创建了一个实用程序类,在那里我创建了一堆创建CGRect的方法,并帮助我为视图分配框架。

Root View Controller

Root View Controller Settings

ios objective-c xcode7
24个回答
143
投票

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

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

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


3
投票

将本地化字符串从en更改为美国为我修复此问题。但是,请确保在更改Info.plist后清理。我注意到在更改plist之后构建时,更新不起作用。 enter image description here


2
投票

就我而言,它是Little Snitch,它会自动阻止网址。


2
投票

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

我有一个UINavigationButton动作,它发出异步任务(POSTRequest)。在执行此请求之前,我将该按钮的customView设置为进度指示器。从异步调用返回时,我将调度到主线程并重置该按钮的customView。之后我关闭了视图(popViewControllerAnimated)。

这是没有出现错误的CORRECT代码:

/* 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
投票

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

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

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


1
投票

我得到了相同的错误信息,因为我assignobject一样的@property (assign, nonatomic) NSNumber *aVariable;属性,通过更改为strong修复。


1
投票

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


1
投票

当我在显示Home时按下UIAlertController按钮时,我看到了这一点,当我重新启动应用程序时被解雇。我添加了代码来解雇UIAlertController中的appDelegate

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

并且错误消息消失了。


1
投票

通过委托解雇popover时出现此错误。在delegateMethod中我触发了一些GUI-Stuff。将GUI-Stuff放在dismissViewControllerAnimated的completionBlock中修复它。

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

66
投票

我还从_BSMachError动作深入链接到iOS 9上的“设置”应用程序时遇到了UIAlertController控制台错误。一个dispatch_async解决了我的问题:

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

1
投票

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

解决这个问题的方法是将模拟指标>尺寸>更改为iPad全屏。除了我们设置为iPad全屏的错误之外,我的所有观点除外。当我改变它时,错误就消失了......


1
投票

一些开发人员在从“Unites States”更改为“en”(或)其他区域后返回错误的原因是“属性列表”和“源代码”视图之间存在差异。这可能是Xcode的bug。只要这两个视图之间存在不匹配,就会抛出此错误,无论是“en”还是“English”。如果您将两个视图更改为“en”或“United States”,则会解决此问题。


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

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

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


0
投票

我还面对Xcode 8.1和iOs 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作为检测界面旋转的替代方法,错误消失了。

我希望这对某人有用


0
投票

在我的情况下,错误的原因是由于调整大小。建于IB。任何可以改变文本字段或类似字符大小的内容,例如更改行长度都可能导致此错误。在我的情况下,我只需要调整文本字段大小以涵盖所有可能性,因此它不需要调整框大小并与其他内容冲突。


31
投票

好吧,我没有把它完全固定下来,但这会让你99%的方式。我正在使用来自ESRI的第三方地图控件,而它的某些内容与“属性”检查器中的某些绘图设置不同。我没有单独尝试每个设置来查看它是什么设置,但当我关闭所有设置时(在红色框中),一切都像魅力一样,我退出控制台上面的错误消息。如果我有时间将其设置为精确设置或设置组合,我将更新答案。

enter image description here


14
投票

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

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

哦亲爱的XCode ......


11
投票

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

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

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. 找到ProjectNameTests文件夹中的info.plist文件。
  3. Localization native development region key的值更改为任何特定区域,例如。英国

Step 1 and 2

Step 3


4
投票

我还在后台线程上运行的NSOperation中遇到了同样的问题,我仍然遇到这个错误,因为UIAlertController仍在移除自己,因为另一个UI事务正在尝试发生。修改我的代码到此修复了问题。

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

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


4
投票

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

  • info.plist中的本地化本机开发区域键
  • 在“属性”检查器中更改绘图设置
  • 甚至改变了info.plist中的ATS Exception Dictionary

但这些解决方案都没有解决我的问题。实际上,我试图共享一些文档,但生成文档需要一些时间,并希望向用户显示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;
    }];
});
});
© www.soinside.com 2019 - 2024. All rights reserved.