このエラーメッセージはかなり低レベルなので、さまざまなシナリオでさまざまな理由で発生します。以下の回答のいずれにも記載されていないシナリオがある場合は、状況を追加することも検討してください。そのため、このエラーメッセージが表示されるさまざまな状況に対する中心的な回答になる可能性があります。
編集2015年11月10日また、私は自分の答えを答えとしてマークしましたが、それは他の誰かが投稿する前のことです。私たちが今以下に見てきたように...なぜなら、答えとしてマークされるべきではないと思います。
私は走っています
昨日はすべてうまくいっていました。
今日、ローテーションに関連したものに関する一連の作業の後、シミュレータでアプリを実行して回転させると、コンソール出力にこのエラーが表示され始めました。
_BSMachError:(os/kern)無効な機能(20)
_BSMachError:(os/kern)無効な名前(15)
- ビルドフォルダをクリアしました - 派生データフォルダをクリーンアップしました - シミュレータをリセットしました。
私は働いていた
UIViewController viewWillLayoutSubviews
UIViewController viewWillTransitionToSize:...
私はIBのAttributes Inspectorで様々な 'Drawing'設定をチェックしていました。
また、UIViewでユーティリティカテゴリを作成し、そこでCGRect
を作成する一連のメソッドを作成し、ビューにフレームを割り当てるのを助けました。
https://forums.developer.Apple.com/thread/15683 に基づいて:
info.plist
の "地域対応ネイティブ開発地域"をen
ではなく米国に変更します。
更新:その後、これらの変更を元に戻すことができます。
私はまた、UIAlertController
アクションからiOS 9のSettingsアプリに深くリンクしている間に_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]];
});
}]];
それはおかしいですが、私にとっての解決策は、エラーが発生したファイル内のすべてのブレークポイントを削除することです。
原因は?誤ってショートカットキーを押して現在行にブレークポイントを作成したと思います。意図しないので、同じショートカットキーをもう一度押して削除しました。
ああ、私の親愛なるXCode ...
私は同じエラーを受けていました...
_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)}
}
新しいデータを提供すると、次のようになりました。
> _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へのアップグレードで始まりました。
私はまたバックグラウンドスレッドで実行されているNSOperationで同じ問題に遭遇しました、そして私はまだ別のUIトランザクションが行われようとしていたのでUIAlertControllerがまだそれ自身を削除していたので私はまだこのエラーを得ていました。私のコードをこれに修正することで問題は解決しました。
defer {
dispatch_async( dispatch_get_main_queue(),{
completion()
})
}
多くの人は延期について知らない - それは現在のスコープを完成させてから実行します。キンダはきちんとしている。
私は同じエラー無効な機能(20)&無効な名前(15)に直面しました。私はそのような他の人が述べたように解決策を試してみました:
しかし、これらの解決策のどれも私の問題を解決しませんでした。実際に、私はいくつかのドキュメントを共有しようとしていましたが、ドキュメントを生成するには時間がかかり、ドキュメントがロードされるまでUIActivityIndicatorViewをユーザーに表示したいと思いました。
私のエラーの解決策は以下のとおりです。
//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;
}];
});
});
私の場合はLittle Snitchで、URLを自動的にブロックしていました。
私は同じエラーがありました、そして、上記のどれも私の問題に当てはまりませんでした。ビューコントローラをデバイスの向きの変更に対するオブザーバとして登録したときに問題が発生したため、ビューのサイズを変更したり、ビュー内の図面を新しいビューのサイズに合わせて作成したりすることができました。
私はいくつかのグラフィックスを描いたUIViewのサブクラスであるviewGraphのアウトレットを持っていました。そのため、デバイスの向きが変わるとspeedGraphを再描画する必要がありました。
問題は、グラフィックを含むいくつかのサブビューをspeedGraphビューに追加したことです。これらのサブビューは、speedGraphビューで新しくレイアウトしてから再描画する必要がありました。デバイスの向きが変わった後、もう一度viewDidAppearを呼び出してspeedGraphビューとそのすべてのサブビューを新しくレイアウトして再描画します。 speedGraphのsetNeedsDisplayを呼び出しても、ビュー内の向きの変更やサブビューでは機能しません。
何が原因でエラーが発生したのですか。 viewDidAppearでは、いくつかの計算を行い、サブビューをspeedGraphビューに追加するメソッドを呼び出します。問題は、これらのサブビューがメソッド内で作成され、このメソッドのspeedGraphビューに追加されたことです。メソッドを終了した後、これらのサブビューへの参照はもちろん削除されますが、それらは追加されているのでspeedGraphビュー内のサブビューは残ります。デバイスが変わると、サブビューが再度作成されてspeedGraphビューに追加されます。このビューにはすでにこれらのサブビューがありますが、これらのサブビューへの参照はもう見つかりません。 speedGraphビューのサブビューの配列は、ぶら下がっているサブビューと共に長くなります。
SpeedGraphビューに追加されるサブビューをクラスプロパティとして定義し、このメソッド内のビューで必要なことを実行することで、問題を解決しました。この変更により、問題は解決しました。
私たちはここで同じエラーを返すすべての状況を投稿することができるので、私は自分の投稿を自由に投稿しました:)。バックグラウンドでプライバシー設定を変更したときにエラーが発生しました。私のアプリが設定アプリを開いたので、ユーザーが自分のフォトライブラリに許可を与えることができます。許可スイッチが設定されていると、アプリはエラーを出してクラッシュします。
_BSMachError: (os/kern) invalid capability (20)
_BSMachError: (os/kern) invalid name (15)
ユーザーがあなたのアプリがアクセスできるものを変更したので、これはOSによるあなたのアプリの強制的な再起動のようです。だから私の場合、それはエラーを引き起こしたOSの行動です。
私は私のためにエラーを再現することができます:私がすでに閉じているビュー内のビューの1つに変更を加えると(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
})
})
}
いくつかオブザーバを追加した後、このエラーがポップアップし始めました。
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)
私はからこのエラーを得ました:
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 //
}
それから私のアラートコールでプロンプトを使いました。これで問題は解決しました。
だからそれはタイミングの問題だと思われます。
"Unites States"から "en"(または)他の地域に変更してもエラーが発生しない開発者がいるのは、 "Property list"ビューと "Source code"ビューに矛盾があるためです。おそらくXcodeのバグです。これら2つのビューの間に不一致があるときはいつでも、それが "en"または "English"であるものは何でも、このエラーを投げます。両方のビューが同じになるように「en」または「United States」に変更した場合は、問題が解決します。
それが価値があるもののために - それは多くの状況がこのエラーを投げているようです。私の場合は、ユーザーがデータ入力フォームを却下し、データがフォームに入っていたときにアラートを送信しました。 View Controllerを巻き戻す前に、該当するすべてのフィールドからプログラムでファーストレスポンダを辞任することで、このエラーを解消することができました。
assign
name__プロパティを@property (assign, nonatomic) NSNumber *aVariable;
のようなobject
name__プロパティに変更し、strong
name__に変更することで修正したため、同じエラーメッセージが表示されました。
私はこれで初心者ですので、それが価値があるもののためにこれを取ります。
これを修正したのは、Simulated Metrics> Size>をiPad Full Screenに変更したことです。このエラーを投げたものを除いて、私の見解はすべてiPad Full Screenに設定しました。私がそれを変更したとき、エラーは消えました...
デリゲート経由でポップオーバーを却下すると、このエラーが発生しました。 delegateMethodでは、私はいくつかのGUIを起動しました。 dismissViewControllerAnimatedのcompletionBlockにGUI-Stuffを配置することで修正されました。
[myPopoverView dismissViewControllerAnimated:YES completion:^{ //GUI-Stuff}];
Home
が表示されているときにUIAlertController
ボタンを押したときにこれを確認しましたが、これはアプリを再起動したときに却下されました。 UIAlertController
のappDelegate
を却下するコードを追加しました。
func applicationWillResignActive(application: UIApplication) {
window?.rootViewController?.dismissViewControllerAnimated(false, completion: nil)
}
そしてエラーメッセージは消えた。
私が直面していたXcode 8.1とiOs 10でも
_BSMachError:(os/kern)無効な機能(20)
_BSMachError:(os/kern)無効な名前(15)
実行時にiPadのサイズクラスをPortraidとLandscapeの2つの異なるインターフェイスレイアウトに変更するためにUiTraiCollection varをオーバーライドしようとしました。クラッシュすることなく動作しましたが、エラーが発生しました。
これは "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に建てられました。テキストフィールドのサイズを変えることができるもの、あるいは行の長さを変えるものなどは、このエラーにつながる可能性があります。私の場合は、テキストフィールドのサイズを調整してすべての可能性をカバーするようにしたので、ボックスのサイズを変更したり、他のものと競合したりする必要はありません。