'_BSMachError: (os / kern) geçersiz yetenek (20)' hata mesajı


173

Bu hata mesajının oldukça düşük bir seviyede olduğunu lütfen unutmayın, bu nedenle farklı senaryolarda farklı nedenlerle ortaya çıkar. Aşağıdaki yanıtlardan birinde belirtilmeyen bir senaryo varsa, lütfen durumunuzu da eklemeyi düşünün, bu belki de bu hata mesajını ortaya çıkaran çeşitli durumlar için merkezi bir cevap olabilir.

Edit 10 Kas 2015 Ayrıca not, kendi cevabımı cevap olarak işaretledim, ancak bu başka birisinin gönderilmesinden önceydi. Sanırım hiçbiri gerçekten cevap olarak işaretlenmemeli, çünkü aşağıda gördüğümüz gibi ... bu hatanın tek bir cevabı yok çünkü çok düşük bir seviye.

koşuyorum

  • iOS 9.0 Simülatörü
  • XCode 7.0

Dün her şey yolunda gidiyordu.

Bugün, rotasyonla ilgili şeyler üzerinde bir sürü çalışma yaptıktan sonra, uygulamayı Simülatörde çalıştırdığımda ve döndürdüğümde konsolumda bu hatayı almaya başladım.

_BSMachError: (os / kern) geçersiz yetenek (20)

_BSMachError: (os / kern) geçersiz ad (15)

Bu sorunun ekran görüntüsü - Derleme klasörümü temizledim, - Türetilmiş veri klasörünü temizledim, - Simülatörü sıfırladım.

İle çalışıyordum

  • UIViewController viewWillLayoutSubviews
  • UIViewController viewWillTransitionToSize:...

Ayrıca IB'deki Nitelikler Denetçisi'nde çeşitli 'Çizim' ayarlarını kontrol ediyordum.

Ayrıca UIView'da, bir dizi yöntem oluşturan CGRectve görünümlere çerçeve atamama yardımcı olan bir grup yöntem oluşturdum .

Kök Görüntüleme Denetleyicisi

Kök Görünümü Denetleyici Ayarları


BLE üzerinde çalışırken bu hatayı alıyorum
Nex Mishra

1
Henüz bir çözüm bulamıyorum ve dönerken de alıyorum. Xcode'un sadece az miktarda bellek kullanıldığını bildirmesine rağmen, kısa bir süre sonra bazen bir bellek uyarısı alıyorum. Sinir bozucu.
narco

79
MyFoodTracker
Redaksiyon

8
MyFoodTracker neden ekran görüntüsünde kırmızı çizgi ile çarpıldı?
Marián Černý

2
@LogicsaurusRex "Bu ne anlama geliyor?" gerçekten yararlı bir soru değil, ancak "düzeltilmesi gerekiyor mu?" belki daha iyi bir soru (cevap istiyorum). Uygulamam iyi çalışıyor gibi görünüyor, ancak bu hatayı gösteriyor. Onu sabitlemek ve düzeltmek isterim, ancak bu küçük bir uygulama değil ve bulmak bana değerli zamana mal olacak.
vrwim

Yanıtlar:


144

Https://forums.developer.apple.com/thread/15683 temel alınarak :

" Yerelleştirme yerel kalkınma bölgesi " info.plistyerine ABD'yi değiştirin en.

Güncellendi: Ardından bu değişiklikleri geri alabilirsiniz.


3
Benim için de çalıştı. Sonra "en" ayarına geri döndü ve hata geri gelmiyor gibi görünüyor.
Skoua

Benim için bu hatanın yeni bir örneği olarak çalıştı. Orijinal gönderiyi buraya gönderdim ve çizim onay kutularından biri nedeniyle bu hatayı alıyordum. Uzun bir süre gitti ve şimdi bilinmeyen bir nedenden ötürü tekrar kırpılmaya başladı ve bunu değiştirmek gerçekten düzeltti ... HOLY COW bu harika.
Logicsaurus Rex

Benimki var ja, değil en. Ne yapmalıyım? Şuna ayarla Japan?
Nicolas Miari

1
Bu işe yaradı. Ancak tekrar en ve geri hata döndü 😒
Neo Ighodaro

30
Böyle cevapları gerçekten sevmiyorum. Çünkü hiçbir şeyi açıklamıyor. XCode'da bir hata mı? Kod konumlandırmamız yanlış mı? Ya da ne?
GeneCode

66

Ayrıca _BSMachError, bir UIAlertControllereylemden iOS 9'daki Ayarlar uygulamasına derin bağlantı kurarken konsol hatalarıyla karşılaştım . Sorunumu dispatch_asyncçözdü:

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

2
Bu benim için konsol hatasını kaldırdı, ancak aynı anda gerçekleşen düzeltmeye çalıştığım ana kilitleme hatası yardımcı olmadı
Jason

muhtemelen bu cevabı genelleştirebilir, bir uialertcontroller (neredeyse aynı kod) segue yaparken benim var. Muhtemelen alertcontroller'ın kendini resimden nasıl çıkardığıyla ilgilidir. Ayrıca dispatch_async ile sorunumu çözdü.
user3802077

burada aynı sorun - UIAlertController içinden UIAlertAction için işleyici aracılığıyla benim app içinden sistem ayarlarına giderken özellikle bu 9.2 simülatörde oluşur. Kod eski UIAlertView yerine UIAlertController için yeniden yazdığınızda sim aynı _BSMach hatalarını (15,20) attı. Gerçek cihazda (ipad) gerçekleşmedi. Dispatch_async simülatörü mutlu etti. Kesinlikle UIAlertController ile ilgilidir.
Mike Kogan

aynı sorun tekrar kafa, bu kez sim değil bir ipad ve sim değil yeniden yetiştirdi. bu kez, görünümleri makro kaynaklarına neden olan bir pdf bağlamına dönüştüren bir koddu. tekrar dispatch_async düzeltti. Ayrıca bu kod bir UIAlertController bir UIAlertAction tamamlama işleyicisinden çağrılmadan yürütüldüğünde, bu hata oluşmadığını doğruladı. her iki durumda da hata sadece XCode hata ayıklama konsolunda görülebilir ve uygulama düzgün çalışmaya devam etti. Bu iş parçacığında önerilen yerelleştirme fikirlerinin hiçbirinin her iki senaryoda da herhangi bir etkisi olmadı.
Mike Kogan

@Jason Ben de aynı sorunu vardı, konsol hata mesajı kaldırıldı, ama yine de çöküyor. Bir şekilde çözmeyi başardın mı?
bp14

32

Tamam, tamamen sabitlemedim, ancak bu sizi% 99 oranında oraya götürecektir. ESRI'dan bir üçüncü taraf harita kontrolü kullanıyorum ve bununla ilgili bir şey, Nitelikler Müfettişindeki bu çizim ayarlarından birini beğenmiyor. Hangi ayar olduğunu görmek için her ayarı tek tek denemedim, ancak hepsini kapattığımda (kırmızı kutuda), her şey bir cazibe gibi çalıştı ve konsolda yukarıdaki hata mesajını almayı bıraktım. Kesin ayar veya ayar kombinasyonuna çivilemek için zaman alırsam, cevabı güncelleyeceğim.

resim açıklamasını buraya girin


Bence cevabınız oldukça iyi. Ancak, üstteki kalın metni kaldıracağım. Son zamanlarda çok sayıda isimsiz cevap var, kişisel bir şey olduğundan şüpheliyim.
Jason D

bunlardan birini kullanmam gerekirse ne olacak?
Zaraki

15

Çılgınca ama benim için çözüm, hatanın meydana geldiği dosyadaki tüm kesme noktalarını kaldırmaktı.

Sebep gelince? Sanırım mevcut satırda bir kesme noktası oluşturmak için yanlışlıkla bir kısayol tuşuna bastım. Bu istenmediği için silmek için aynı kısayol tuşuna tekrar basıyorum.

Ah sevgili XCode'um ...


Bu benim için çalıştı. Sorunun bu olduğuna dair bir ipucu, Xcode'un kesme noktası olmayan satırları kıracağıydı. Sonra, farklı bir satırda _BSMachErrors yukarıda var.
didge

12

Aynı hataları alıyordum ...

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

Birinden openURL () UIAlertAction

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

Sonraki çalıştırma döngüsü düzeltilinceye kadar bloğun yürütülmesini erteliyor ...

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

9

Yeni veri sağlarken aşağıdakileri alıyordum:

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

Yeni veri sağlamak için bir düğme kullanıldığında hata oluştu. Bir işlemden NSTimerdöndükten sonra verileri yenilemek ve güncellemek için A kullanıldı performSegueWithIdentifier. Zamanlayıcı aktive edildi ve daha sonra dönüş zamanında kullanımdan hemen sonra geçersiz kılındı. MSMachErrorZamanlayıcı çıkarıldı zaman durdu ve - (void)viewWillAppear:(BOOL)animatedve (void)viewDidAppear:(BOOL)animatedaynı işlevi gerçekleştirmek için kullanıldı. Bu hata Xcode 7'ye yükseltme ile başladı.


6

Ben değerini değiştirerek sabit bu sorunu var Localization native development regionanahtarı United Kingdom [ya da herhangi bir spesifik bölge] varsayılan değer dan eniçinde mevcut info.plistprojenizin.

  1. seçmek Project Navigator
  2. info.plistProjectNameTests klasöründe bulunan dosyayı bulun .
  3. Değerini, örneğinLocalization native development region key herhangi bir bölgeyle değiştirin . Birleşik Krallık

Adım 1 ve 2

Aşama 3


Evet, bu düzeltme çılgınca geliyor, ama işe yarıyor. Benim için uygulama Xcode 7.3.1 bağlı bir iPod touch 5. nesil konuşlandırıldığında çalıştı. Ancak Xcode'dan bağlı bir iPad Air'e ilk dağıtıldığında bununla karşılaştım BSMachError. United StatesHatayı gidermek için bölge değiştirme . Yine başka bir açıklanamaz Xcode gizemi.
Basil Bourque

4

Ayrıca bir arka plan iş parçacığı üzerinde çalışan bir NSOperation aynı sorunu koştu ve hala bir UIAlertController hala başka bir UI işlem gerçekleşmeye çalışıyordu olarak kendini kaldırıyordu çünkü bu hatayı alıyordu. Kodumu bu şekilde değiştirmek sorunu çözdü.

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

Birçok insan erteleme hakkında bilmiyor -Onun kapsamını tamamlar ve sonra çalışır. Biraz temiz.


4

Aynı hatayla geçersiz yetenek (20) ve geçersiz isim (15) ile karşılaştım. Diğerleri tarafından belirtildiği gibi çözümleri denedim:

  • İnfo.plist içindeki yerelleştirme yerel kalkınma bölgesi anahtarı
  • Özellikler Denetçisinde çizim ayarlarını değiştirme
  • İnfo.plist'deki ATS İstisna Sözlüğü bile değiştirildi

Ama bu çözümlerin hiçbiri sorunumu çözmedi. Aslında, bazı belge paylaşmaya çalışıyordum ama belge oluşturmak biraz zaman alacaktı ve zaman belgesi yüklenene kadar kullanıcıya bir UIActivityIndicatorView göstermek istedim.

Benim hatamın çözümü şuydu:

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

Mükemmel, benim için çalıştı! Kullanıcı arayüzünün güncellenmesinin dispatch_get_main_queue () içinde yapılması gerektiğini bilmek
önemlidir

3

Yerelleştirme dizesini en yerine Amerika Birleşik Devletleri olarak değiştirmek bunu benim için düzeltti. Ancak, Info.plist'i değiştirdikten sonra temizlediğinizden emin olun. Sadece plist değişiklikleri yaptıktan sonra oluşturduğunuzda güncellemelerin çalışmadığını fark ettim.resim açıklamasını buraya girin



2

Benim için hata çoğaltmak olabilir: Bir görünümü içinde aslında zaten kapattığım bir görünümde değişiklik yaparsanız (popViewControllerAnimated) hata alırsınız.

Eşzamansız bir görev (POSTRequest) yapan bir UINavigationButton eylem yaşıyorum. Bu isteği gerçekleştirmeden önce, o düğmenin customView öğesini bir ilerleme göstergesine ayarladım. Eşzamansız çağrıdan geri döndüğümde ana iş parçacığına gönderirim ve o düğmenin customView değerini sıfırlarım. Bundan sonra görünümü kapatıyorum (popViewControllerAnimated).

Bu, hatanın görünmediği DOĞRU koddur:

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

Hatanın nedeni satırları değiştirmekti: görünümü kapatmak ve sonra customView'i nil olarak ayarlamak:

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

Bazı gözlemciler ekledikten sonra bu hata ortaya çıkmaya başladı:

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

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

Sınıf adını belirttiğimde sorun ortadan kalktı 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

Aynı hatayla karşılaştım ve yukarıdakilerin hiçbiri sorunuma uygulanmadı. Sorun, görünüm denetleyicimi bir aygıt yönlendirme değişikliğine gözlemci olarak kaydettiğimde ortaya çıktı, böylece görünümler yeniden boyutlandırılabilir ve görünümdeki çizimler görünümün yeni boyutuna göre yapılabilir.

Ben bazı grafikler çizdi UIView bir alt sınıf olan bir viewGraph bir çıkış vardı. Manzara modunda viewGraph boyutu portre modunda daha büyük. Bu yüzden cihaz yönünü değiştirdiğinde speedGraph'ın yeniden çizilmesi gerekiyordu.

Sorun şu ki, speedGraph görünümüne grafik içeren birkaç alt görünüm ekledim. Bu alt görüntülerin speedGraph görünümünde yeniden düzenlenmesi ve ardından yeniden çizilmesi gerekiyordu. Cihaz yönünü değiştirdikten sonra, speedGraph görünümünü ve tüm alt görünümlerini yeniden düzenlenip kendilerini yeniden çizmek için viewDidAppear'ı tekrar aradım. SpeedGraph için setNeedsDisplay çağrısı, görünümdeki yön değiştirme ve alt görünümlerle çalışmaz.

Hatanın görünmesine neden olan neyi yanlış yaptım. ViewDidAppear'da bazı hesaplamaları yapan ve alt görünümleri speedGraph görünümüne ekleyen bir yöntem çağırıyorum. Sorun, bu alt görünümlerin yöntemde oluşturulması ve bu yöntemde speedGraph görünümüne eklenmiş olmasıdır. Yöntemden ayrıldıktan sonra, bu alt görünümlere yapılan referanslar elbette silinir, ancak eklendiğinden beri speedGraph görünümündeki alt görünümler kalır. Cihaz değiştiğinde, alt görünümler yeniden oluşturulur ve bu alt görünümlere zaten sahip olan ancak artık bu alt görünümlere referansları bulamayan speedGraph görünümüne eklenir. SpeedGraph görünümünün alt görünümleri dizisi, sarkan alt görünümlerle daha da uzar.

SpeedGraph görünümüne eklenecek alt görünümleri bir sınıf özelliği olarak tanımlayarak sorunu çözdüm ve sonra bu yöntemin içindeki görünümlerle yapılması gerekeni yaptım. Bu değişiklikle sorun ortadan kalktı.


2

Burada aynı hatayı döndüren tüm durumları gönderebildiğimiz için, benimkini yayınlamaktan çekinmeyin :). Arka planda gizlilik ayarlarını değiştirdiğimde Hata aldım. Uygulamam ayarlar uygulamasını açtı, böylece kullanıcı fotolibresine izin verebilir, izin anahtarı ayarlandığında uygulama düzeltilen hatayla kilitlenir:

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

Kullanıcı, uygulamanızın erişebileceği şeyi değiştirdiğinden, bu, işletim sisteminiz tarafından uygulamanızın zorunlu olarak yeniden başlatılması gibi görünüyor. Yani benim durumumda hataya neden olan işletim sisteminin bir eylemidir.


Ben de aldım. Yani bu aslında bir hata değil. Uygulama Xcode'a bağlı olmadığında korkunç bir şey olmayacak. Teşekkürler kardeşim sadece hata ayıklama zamanımdan tasarruf edebilirsiniz.
yuji

1

Aynı hata iletisini aldım, çünkü ben gibi assignbir objectözellik @property (assign, nonatomic) NSNumber *aVariable;değiştirerek düzeltildi strong.


1

Değeri için - görünüşe göre birçok durum bu hatayı atıyor. Benim durumumda, kullanıcı bir veri giriş formunu kapatırken ve veriler formdayken bir uyarı yayınlamıştım. Görünüm denetleyicisini açmadan önce ilk yanıtlayıcıyı tüm geçerli alanlardan programlı olarak istifa ederek hatayı giderebildim.


Bu da benim yaşadığım sorun, ancak görünüm denetleyicisi gezinti denetleyicisinin gezinme çubuğundaki geri düğmesi tarafından kapatıldığından, prepareForSegue() çağrılmıyor ve ilk yanıtlayıcıyı nerede bırakacağımı bilmiyorum.
TimSim

1

Bunu Home, a UIAlertControllergörüntülenirken düğmeye bastığımda gördüm; bu , uygulamayı yeniden başlattığımda reddedildi. Ben görevden kod eklemiş UIAlertControllerde appDelegate:

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

ve hata mesajı kayboldu.


1

Temsilci aracılığıyla bir popover işten çıkarırken bu hatayı yaşadım. DelegateMethod'da bazı GUI-Öğelerini tetikledim. GUI-Stuff öğesinin dismissViewControllerAnimated komutunun completionBlock öğesine yerleştirilmesi sorunu düzeltti.

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

1

Ben bu bir yenideyim bu yüzden buna değer ne için al.

Bunu benim için sabitleyen, Simüle Edilen Metrikler> Boyut> iPad Tam Ekran olarak değiştirildi. IPad Tam Ekran olarak ayarladığımız bu hatayı atmış olanlar hariç tüm görüşlerim. Değiştirdiğimde hata ortadan kalktı ...


1

Bazı geliştiricilerin "Birleşik Devletleri" den "en" (veya) diğer bölgeye değiştirdikten sonra hatanın geri gelmemesinin nedeni, "Özellik listesi" ile "Kaynak kodu" görünümleri arasında tutarsızlık olmasıdır. Muhtemelen Xcode hatası. Bu iki görünüm arasında uyumsuzluk olduğunda "en" veya "İngilizce" ne olursa olsun bu hatayı atar. Her iki görünümün de aynı olması için "en" veya "United States" olarak değiştirdiyseniz, sorunu düzeltir.


1

Bu hatayı aldım:

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

vb

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:

yeni bir sözlük istemi oluşturmak ve:

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

ve sonra uyarı çağrılarımda bilgi istemi kullanıldı. Bu sorunu çözdü.

Görünüşe göre bu bir zamanlama sorunu.


Korkarım sadece bir süre çalıştı ve sonra tekrar ortaya çıktı - bu yüzden vaka 1'i yorumlamak ve daha sonra bu uyarıyı çağırmak sorunu çözmüş görünüyor.
Jeremy

0

Xcode 8.1 ve iOs 10 ile de karşılaştım

_BSMachError: (os / kern) geçersiz yetenek (20)

_BSMachError: (os / kern) geçersiz ad (15)

iPad'in boyut sınıflarını Portraid ve Landscape'da iki farklı arabirim düzenine sahip olacak şekilde değiştirmek için UiTraiCollection var'ı geçersiz kılmaya çalışmak. Herhangi bir çökme olmadan çalıştı ama hatalarımızı üretti.

Bu "maliciuos" koduydu:

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 viewWillTransitionArayüz rotasyonunu tespit etmek için hatalar alternatif olarak kullanıldı .

Umarım bu birisi için faydalı olur


0

Benim durumumda hatanın nedeni yeniden boyutlandırılmaktan kaynaklandı. Dahili IB. Bir metin alanının boyutunu değiştirebilecek herhangi bir şey veya örneğin satır uzunluğunu değiştirmek gibi bu hataya yol açabilir inanıyorum. Benim durumumda, metin alanının boyutunu tüm olasılıkları kapsayacak şekilde ayarlamak zorunda kaldım, böylece kutuyu yeniden boyutlandırıp başka bir şeyle çatışmaya gerek kalmadı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.