Pesan kesalahan '_BSMachError: (os / kern) kemampuan tidak valid (20)'


173

Harap perhatikan bahwa pesan kesalahan ini cukup rendah, sehingga muncul karena berbagai alasan dalam skenario yang berbeda. Jika Anda memiliki skenario yang tidak disebutkan dalam salah satu jawaban di bawah ini, harap pertimbangkan untuk menambahkan situasi Anda juga, jadi mungkin ini bisa menjadi jawaban sentral untuk berbagai situasi yang menimbulkan pesan kesalahan ini.

Sunting 10 Nov 2015 Juga perhatikan, saya menandai jawaban saya sendiri sebagai jawabannya, tapi itu sebelum orang lain mengepos. Saya kira tidak ada yang benar-benar harus ditandai sebagai jawaban, karena seperti yang telah kita lihat di bawah ini ... kesalahan ini tidak hanya memiliki satu jawaban karena tingkatnya sangat rendah.

saya sedang berlari

  • iOS 9.0 Simulator
  • XCode 7.0

Semuanya bekerja dengan baik kemarin.

Hari ini, setelah banyak pekerjaan pada hal-hal terkait rotasi, saya mulai mendapatkan kesalahan ini di output konsol saya ketika saya menjalankan aplikasi di Simulator dan saya memutarnya.

_BSMachError: (os / kern) kemampuan tidak valid (20)

_BSMachError: (os / kern) nama tidak valid (15)

Tangkapan layar untuk masalah ini - Saya sudah membersihkan folder build saya, - Saya sudah membersihkan folder data turunan, - Saya telah mereset simulator.

Saya bekerja dengan

  • UIViewController viewWillLayoutSubviews
  • UIViewController viewWillTransitionToSize:...

Saya juga memeriksa berbagai pengaturan 'Menggambar' pada Inspektur Atribut di IB.

Saya juga membuat kategori utilitas pada UIView di mana saya membuat banyak metode yang membuat CGRectdan membantu saya menetapkan bingkai untuk dilihat.

Pengontrol Tampilan Root

Pengaturan Pengontrol Tampilan Root


saya mendapatkan kesalahan ini saat mengerjakan BLE
Nex Mishra

1
Saya belum menemukan solusinya, dan saya juga mendapatkannya sambil berputar. Saya juga mendapatkan peringatan memori sesaat setelahnya kadang-kadang, meskipun Xcode melaporkan bahwa hanya sejumlah kecil memori yang digunakan. Membuat frustrasi.
narco

79
Bagus pikir Anda dihapus MyFoodTracker: P
Sam Soffes

8
Mengapa MyFoodTracker dicoret dengan garis merah di tangkapan layar?
Marián Černý

2
@LogicsaurusRex "Apa artinya?" memang bukan pertanyaan yang berguna, tetapi "Apakah perlu diperbaiki?" mungkin merupakan pertanyaan yang lebih baik (yang saya ingin jawabannya). Aplikasi saya tampaknya berfungsi baik tetapi menunjukkan kesalahan ini. Saya ingin menjabarkannya dan memperbaikinya, tetapi ini bukan aplikasi kecil dan menemukan itu akan menghabiskan waktu berharga bagi saya.
vrwim

Jawaban:


144

Berdasarkan pada https://forums.developer.apple.com/thread/15683 :

Ubah " Lokalisasi wilayah pengembangan asli " info.plistmenjadi Amerika Serikat alih-alih en.

Diperbarui: Kemudian Anda dapat mengembalikan perubahan ini kembali.


3
Ini juga berhasil untuk saya. Saya kemudian mengembalikan pengaturan ke "en" dan kesalahan tampaknya tidak kembali.
Skoua

Ini berfungsi untuk saya sebagai contoh BARU dari kesalahan ini terjadi. Saya memposting posting asli di sini dan mendapatkan kesalahan ini karena salah satu kotak centang menggambar. Sudah lama hilang, dan sekarang mulai muncul lagi untuk alasan yang tidak diketahui lainnya, dan mengubah ini benar-benar memperbaikinya ... SAPI KUDUS itu mengagumkan.
Logicsaurus Rex

Milik saya diatur ke ja, tidak en. Apa yang harus saya lakukan? Setel ke Japan?
Nicolas Miari

1
Ini berhasil. Namun kembali ke en lagi dan tidak ada kesalahan 😒
Neo Ighodaro

30
Saya tidak begitu suka jawaban seperti ini. Karena tidak menjelaskan apa-apa. Apakah ini bug di XCode? Apakah posisi kode kami salah? Atau apa?
GeneCode

66

Saya juga mengalami _BSMachErrorkesalahan konsol saat menautkan ke aplikasi Pengaturan pada iOS 9 dari suatu UIAlertControllertindakan. A dispatch_asyncmemecahkan masalah saya:

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

2
Ini menghapus kesalahan konsol untuk saya, tetapi bug penguncian utama yang saya coba perbaiki yang terjadi pada saat yang sama tidak membantu
Jason

mungkin dapat menggeneralisasi jawaban ini, saya mendapatkan milik saya saat melakukan segue dalam uialertcontroller (kode yang hampir sama). Mungkin ada hubungannya dengan bagaimana alertcontroller keluar dari gambar. Memecahkan masalah saya dengan dispatch_async juga.
user3802077

masalah yang sama di sini - khususnya ini terjadi di 9.2 simulator ketika pergi ke pengaturan sistem dari dalam aplikasi saya melalui handler untuk UIAlertAction dari dalam UIAlertController. Ketika saya menulis ulang kode ke UIAlertController, bukan UIAlertView lama, sim melemparkan kesalahan _BSMach yang sama (15,20). Tidak terjadi di perangkat nyata (ipad). Dispatch_async membuat simulator senang. Jelas terkait dengan UIAlertController.
Mike Kogan

masalah yang sama muncul kepala lagi, kali ini bukan di sim tetapi pada ipad dan BUKAN sim. kali ini beberapa kode yang memberikan tampilan ke dalam konteks pdf yang menyebabkan macherrors. lagi dispatch_async memperbaikinya. Saya juga memverifikasi bahwa ketika kode ini dieksekusi tanpa dipanggil dari penangan penyelesaian UIAlertAction di UIAlertController kesalahan ini tidak terjadi. dalam kedua kasus saya kesalahan hanya terlihat di konsol debug XCode dan aplikasi terus dijalankan dengan benar. Tidak satu pun dari ide pelokalan yang disarankan pada utas ini yang memiliki dampak apa pun terhadap skenario mana pun.
Mike Kogan

@ Alasan saya memiliki masalah yang sama, menghapus pesan kesalahan konsol, tetapi masih macet. Apakah Anda berhasil menyelesaikannya entah bagaimana?
Bp14

32

Ok, saya belum menyematkannya sepenuhnya, tapi ini akan membuat Anda 99% dari perjalanan ke sana. Saya menggunakan kontrol peta pihak ketiga dari ESRI, dan sesuatu tentang itu tidak suka salah satu pengaturan gambar ini di Inspektur Atribut. Saya belum mencoba setiap pengaturan secara individual untuk melihat pengaturan itu, tetapi ketika saya mematikan semuanya (di kotak merah), semuanya bekerja seperti pesona, dan saya berhenti mendapatkan pesan kesalahan di atas di konsol. Jika dan ketika saya mendapatkan waktu untuk memakukannya ke pengaturan yang tepat atau kombinasi pengaturan, saya akan memperbarui jawabannya.

masukkan deskripsi gambar di sini


Saya pikir jawaban Anda cukup bagus. Namun, saya akan menghapus teks tebal di bagian atas. Sudah ada banyak downvotes jawaban anonim akhir-akhir ini, saya ragu itu sesuatu yang pribadi.
Jason D

bagaimana jika saya harus menggunakan salah satunya?
Zaraki

15

Ini gila, tetapi bagi saya solusinya adalah menghapus semua breakpoint dalam file di mana kesalahan terjadi.

Adapun penyebabnya? Saya rasa saya tidak sengaja menekan tombol pintas untuk membuat breakpoint di baris saat ini. Karena itu tidak disengaja saya menekan tombol pintas yang sama lagi untuk menghapusnya.

Ya XCode sayang ...


Ini berhasil untuk saya. Satu petunjuk bahwa ini adalah masalahnya adalah bahwa Xcode akan memecah baris yang tidak memiliki breakpoint. Kemudian, pada baris yang berbeda saya mendapatkan _BSMachErrors di atas.
didge

12

Saya mendapatkan kesalahan yang sama ...

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

Saya menelepon openURL () dari a UIAlertAction

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

Menunda pelaksanaan blok sampai putaran berikutnya diperbaiki ...

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

9

Saya mendapatkan yang berikut saat memasok data baru:

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

Kesalahan terjadi ketika tombol digunakan untuk memasok data baru. An NSTimerdigunakan untuk menyegarkan dan memperbarui data setelah kembali dari suatu performSegueWithIdentifiertindakan. Timer diaktifkan dan kemudian dibatalkan segera setelah digunakan pada waktu kembali. The MSMachErrorberhenti saat timer telah dihapus dan - (void)viewWillAppear:(BOOL)animateddan (void)viewDidAppear:(BOOL)animateddipekerjakan untuk melakukan fungsi yang sama. Kesalahan ini dimulai dengan peningkatan ke Xcode 7.


6

Saya memperbaiki masalah ini dengan mengubah nilai Localization native development regionkunci ke United Kingdom [atau wilayah tertentu] dari nilai default yang enada di info.plistproyek Anda.

  1. Pilih Project Navigator
  2. Temukan info.plistfile yang ada di folder ProjectNameTests.
  3. Ubah nilai dari Localization native development region keyke wilayah tertentu untuk misalnya. Britania Raya

Langkah 1 dan 2

Langkah 3


Ya, perbaikan ini terdengar gila, tetapi berhasil. Bagi saya aplikasi tersebut bekerja ketika Xcode 7.3.1 digunakan untuk iPod touch 5th gen tertambat. Tetapi ketika pertama kali digunakan dari Xcode ke iPad Air tertambat saya menemukan ini BSMachError. Beralih wilayah untuk United Statesmembuat kesalahan hilang. Namun misteri Xcode lain yang tidak bisa dijelaskan.
Basil Bourque

4

Saya juga mengalami masalah yang sama di NSOperation berjalan pada latar belakang dan saya masih mendapatkan kesalahan ini karena UIAlertController masih menghapus sendiri sebagai transaksi UI lain sedang mencoba untuk terjadi. Memodifikasi kode saya untuk memperbaiki masalah ini.

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

Banyak orang tidak tahu tentang penundaan - Ini memungkinkan ruang lingkup saat ini selesai dan kemudian berjalan setelah. Agak rapi.


4

Saya memang menghadapi kesalahan kesalahan yang sama (20) & nama tidak valid (15). Saya mencoba solusi seperti yang disebutkan oleh orang lain seperti:

  • Lokalisasi kunci wilayah pengembangan asli di info.plist
  • Mengubah pengaturan gambar di Inspektur Atribut
  • Bahkan mengubah Kamus Pengecualian ATS di info.plist

Tapi tidak ada solusi yang memecahkan masalah saya. Sebenarnya, saya mencoba untuk membagikan beberapa dokumen tetapi menghasilkan dokumen akan memakan waktu dan ingin menampilkan UIActivityIndicatorView kepada pengguna hingga waktu dokumen dimuat.

Solusi untuk kesalahan saya adalah:

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

Luar biasa, bekerja untuk saya! Penting untuk diketahui bahwa memperbarui UI harus dilakukan di dispatch_get_main_queue ()
MkaysWork

3

Mengubah string pelokalan dari en ke Amerika Serikat memperbaiki ini untuk saya. Namun, pastikan Anda membersihkan setelah Anda mengubah Info.plist. Saya perhatikan bahwa pembaruan tidak berfungsi ketika Anda baru saja membangun setelah membuat perubahan plist.masukkan deskripsi gambar di sini



2

Saya dapat mereproduksi kesalahan untuk saya: Jika a melakukan perubahan pada salah satu Tampilan dalam Tampilan yang sebenarnya sudah saya tutup (popViewControllerAnimated) saya menerima kesalahan.

Saya memiliki tindakan UINavigationButton yang membuat tugas asinkron (POSTRequest). Sebelum melakukan permintaan ini, saya mengatur customView tombol itu ke indikator kemajuan. Ketika kembali dari panggilan asinkron, saya mengirim ke utas utama dan mereset customView tombol itu. Setelah itu saya menutup tampilan (popViewControllerAnimated).

Ini adalah kode yang BENAR di mana kesalahan tidak muncul:

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

Apa yang menyebabkan kesalahan adalah berpindah jalur: menutup tampilan dan kemudian mengatur customView ke 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

Kesalahan ini mulai muncul setelah saya menambahkan beberapa pengamat:

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

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

Masalahnya hilang ketika saya menentukan nama kelas alih-alih 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

Saya memiliki kesalahan yang sama dan tidak ada yang di atas berlaku untuk masalah saya. Masalahnya muncul ketika saya mendaftarkan pengontrol tampilan saya sebagai pengamat perubahan orientasi perangkat, sehingga tampilan dapat diubah ukurannya dan gambar dalam tampilan dapat dibuat sesuai dengan ukuran tampilan yang baru.

Saya memiliki outlet viewGraph yang merupakan subkelas dari UIView di mana saya menggambar beberapa gambar. Dalam mode lansekap ukuran viewGraph lebih besar daripada dalam mode potret. Jadi ketika perangkat mengubah orientasinya, speedGraph perlu digambar ulang.

Masalahnya adalah, saya menambahkan beberapa subview ke tampilan speedGraph, yang berisi gambar. Subview ini perlu ditata lagi dalam tampilan speedGraph dan kemudian digambar ulang. Setelah perangkat mengubah orientasinya, saya memanggil viewDidAppear lagi untuk membuat tampilan speedGraph dan semua subview untuk ditata lagi dan menggambar ulang sendiri. Memanggil setNeedsDisplay untuk speedGraph tidak berfungsi dengan perubahan orientasi dan subview dalam tampilan.

Apa yang saya lakukan salah yang menyebabkan kesalahan muncul. Di viewDidAppear saya memanggil metode yang melakukan beberapa perhitungan dan menambahkan subview ke tampilan speedGraph. Masalahnya adalah bahwa subview ini dibuat dalam metode dan ditambahkan ke tampilan speedGraph dalam metode ini. Setelah meninggalkan metode, referensi ke subview ini tentu saja dihapus, tetapi subview dalam tampilan speedGraph tetap ada, karena ditambahkan. Ketika perangkat berubah, subview dibuat lagi dan ditambahkan ke tampilan speedGraph, yang sudah memiliki subview ini, tetapi tidak dapat menemukan referensi ke subview ini lagi. Array subview dari tampilan speedGraph semakin lama semakin panjang dengan (saya pikir) menggantung subview.

Saya memecahkan masalah dengan mendefinisikan subview yang akan ditambahkan ke tampilan speedGraph sebagai properti kelas dan kemudian melakukan apa yang perlu dilakukan dengan pandangan di dalam metode ini. Dengan perubahan ini masalahnya hilang.


2

Karena kita dapat memposting semua situasi yang mengembalikan kesalahan yang sama di sini, saya merasa bebas untuk memposting milik saya :). Saya mendapatkan Kesalahan saat saya mengubah pengaturan privasi di latar belakang. Aplikasi saya membuka aplikasi pengaturan sehingga pengguna dapat memberikannya izin ke photolibrary-nya, ketika sakelar izin diatur, aplikasi macet dengan kesalahan mension:

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

Tampaknya ini adalah restart paksa aplikasi Anda oleh OS, karena pengguna mengubah apa yang dapat diakses aplikasi Anda. Jadi dalam kasus saya itu adalah tindakan dari OS yang menyebabkan kesalahan.


Saya juga punya yang ini. Jadi ini sebenarnya bukan bug. Ketika aplikasi tidak terhubung ke Xcode, tidak ada yang menakutkan akan terjadi. Terima kasih bro, Anda mungkin hanya menghemat waktu debugging saya.
yuji

1

Saya mendapat pesan yang sama kesalahan, karena saya assignseorang objectproperti seperti @property (assign, nonatomic) NSNumber *aVariable;, tetap dengan mengubah ke strong.


1

Untuk apa nilainya - tampaknya banyak situasi melempar kesalahan ini. Dalam kasus saya, saya telah memposting peringatan ketika pengguna menolak formulir entri data dan data ada di formulir. Saya bisa menghilangkan kesalahan dengan secara program mengundurkan diri dari responden pertama dari semua bidang yang berlaku sebelum membuka gulungan pengontrol tampilan.


Ini adalah masalah yang saya alami juga, tetapi karena pengontrol tampilan diberhentikan oleh tombol kembali dari bilah navigasi pengendali navigasi, prepareForSegue()tidak dipanggil dan saya tidak tahu di mana harus mengundurkan diri responden pertama.
TimSim

1

Saya melihat ini ketika saya menekan Hometombol ketika UIAlertControllersedang ditampilkan, yang diberhentikan ketika saya meluncurkan kembali aplikasi. Saya menambahkan kode untuk memberhentikan UIAlertControllerdi appDelegate:

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

dan pesan kesalahan menghilang.


1

Saya memiliki kesalahan ini ketika menolak popover melalui delegasi. Dalam delegateMethod saya memicu beberapa GUI-Stuff. Menempatkan GUI-Stuff di dalam penyelesaianBlock of dismissViewControllerDirama memperbaikinya.

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

1

Saya seorang pemula dalam hal ini, jadi anggap ini layak.

Apa yang diperbaiki untuk saya adalah mengubah Metrik Simulasi> Ukuran> ke Layar Penuh iPad. Semua pandangan saya KECUALI untuk orang yang melempar kesalahan ini kita atur ke iPad Full Screen. Ketika saya mengubahnya, kesalahan hilang ...


1

Alasan beberapa pengembang tidak mendapatkan kesalahan kembali setelah berganti dari "Unites States" ke "en" (atau) wilayah lain, adalah karena ada perbedaan antara pandangan "Daftar properti" dan "Kode sumber". Itu mungkin bug Xcode. Setiap kali ada ketidaksesuaian antara dua tampilan ini akan menimbulkan kesalahan ini, apa pun itu "en" atau "Bahasa Inggris". Jika Anda mengubah ke "en" atau "Amerika Serikat" agar kedua tampilan menjadi sama, akan memperbaiki masalahnya.


1

Saya mendapatkan kesalahan ini dari:

var promptsArr =  StartRegAlerts() //Instance of the class

dll

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:

membuat prompt kamus baru dan:

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

dan kemudian digunakan prompt dalam panggilan peringatan saya. Itu memperbaiki masalah.

Jadi sepertinya ini masalah waktu.


Saya khawatir itu hanya bekerja untuk sementara dan kemudian muncul kembali - jadi berkomentar keluar kasus 1 dan kemudian memanggil peringatan itu kemudian tampaknya telah menyelesaikan masalah.
Jeremy

0

dengan Xcode 8.1 dan iOs 10 saya juga hadapi

_BSMachError: (os / kern) kemampuan tidak valid (20)

_BSMachError: (os / kern) nama tidak valid (15)

mencoba menimpa UiTraiCollection untuk mengubah saat runtime kelas iPad'size untuk memiliki dua tata letak antarmuka yang berbeda di Portraid dan Landscape. Itu bekerja tanpa kerusakan tetapi menghasilkan kesalahan kami.

Ini adalah kode "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
}

Kesalahan digunakan override func viewWillTransitionsebagai alternatif untuk mendeteksi rotasi antarmuka.

Semoga ini bermanfaat bagi seseorang


0

Dalam kasus saya penyebab kesalahan adalah karena pengubahan ukuran. Dibangun pada IB. Apa pun yang dapat mengubah ukuran bidang teks atau sejenisnya misalnya mengubah panjang baris dapat menyebabkan kesalahan ini saya percaya. Dalam kasus saya, saya hanya perlu menyesuaikan ukuran bidang teks untuk mencakup semua kemungkinan sehingga tidak perlu mengubah ukuran kotak dan bertentangan dengan hal lain.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.