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

时间:2015-10-02 02:16:43

标签: ios objective-c xcode7

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

编辑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

24 个答案:

答案 0 :(得分:143)

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

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

更新:然后您可以恢复这些更改。

答案 1 :(得分: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]];
    });
}]];

答案 2 :(得分:31)

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

enter image description here

答案 3 :(得分:14)

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

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

哦亲爱的XCode ......

答案 4 :(得分: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)}
 }

答案 5 :(得分: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 :(得分:6)

我通过将Localization native development region密钥的值更改为United Kingdom [或任何特定区域] 的值en来解决此问题。 1}}你的项目。

  1. 选择info.plist
  2. 找到ProjectNameTests文件夹中的Project Navigator文件。
  3. info.plist的值更改为任何特定区域,例如英国
  4. Step 1 and 2

    Step 3

答案 7 :(得分: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;
    }];
});
});

答案 8 :(得分:4)

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

File.one_through_one :client
File.one_through_one :invoice

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

答案 9 :(得分:3)

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

答案 10 :(得分: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
      })
    })
}

答案 11 :(得分:2)

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

答案 12 :(得分: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)

答案 13 :(得分:2)

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

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

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

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

我通过定义将作为类属性添加到speedGraph视图的子视图来解决问题,然后执行需要对此方法内的视图执行的操作。随着这种变化,问题就消失了。

答案 14 :(得分:2)

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

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

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

答案 15 :(得分:1)

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

答案 16 :(得分:1)

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

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

并且错误消息消失了。

答案 17 :(得分:1)

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

答案 18 :(得分:1)

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

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

答案 19 :(得分:1)

我是一个新手,所以请把它当作值得的。

为我修复此问题的是改变模拟指标>尺寸>到iPad全屏。除了我们设置为iPad全屏的错误之外,我的所有观点除外。当我改变它时,错误就消失了......

答案 20 :(得分:1)

我收到了相同的错误消息,因为我assign object属性@property (assign, nonatomic) NSNumber *aVariable;,通过更改为strong来修复。

答案 21 :(得分: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 //
      }

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

所以看来这是一个时间问题。

答案 22 :(得分:0)

使用Xcode 8.1和iOs 10我也面临

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

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

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

这是“boysiuos”代码:

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作为检测接口旋转的替代方法,错误消失了。

我希望这对某人有用

答案 23 :(得分:0)

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