Повідомлення про помилку '_BSMachError: (os / kern) непрацездатність (20)'


173

Зауважте, що це повідомлення про помилку є досить низьким, тому воно з’являється з різних причин у різних сценаріях. Якщо у вас є сценарій, який не згадується в одній з відповідей нижче, будь ласка, подумайте про те, щоб додати свою ситуацію, тому, можливо, це може бути центральною відповіддю для різних ситуацій, які викликають це повідомлення про помилку.

Редагувати 10 листопада 2015 р. Також зауважте, я позначив власну відповідь як відповідь, але це було раніше, ніж хто-небудь ще розмістив повідомлення. Я думаю, жоден не повинен бути позначений як відповідь, тому що, як ми вже бачили нижче ... ця помилка не має лише однієї відповіді, оскільки вона настільки низька.

Я бігаю

  • iOS 9.0 Simulator
  • XCode 7.0

Вчора все нормально працювало.

Сьогодні, після безлічі робіт над ротаційними матеріалами, я почав отримувати цю помилку на виході консолі, коли запускаю додаток у симуляторі та обертаю його.

_BSMachError: (os / kern) непрацездатність (20)

_BSMachError: (os / kern) недійсне ім'я (15)

Знімок екрана для цього питання - Я очистив папку збірки, - очистив отриману папку даних, - я скинув тренажер.

Я працював із

  • UIViewController viewWillLayoutSubviews
  • UIViewController viewWillTransitionToSize:...

Я також перевіряв різні параметри "Малювання" у Інспектора атрибутів у ІБ.

Я також створив категорію утиліт на UIView, де я створив купу методів, які створюють CGRectі допомагають мені призначати кадри переглядам.

Кореневий контролер

Налаштування контролера Root View


я отримую цю помилку під час роботи над BLE
Nex Mishra

1
Я ще не можу знайти рішення, і я також отримую його під час обертання. Я також отримую попередження про пам’ять невдовзі іноді, хоча Xcode повідомляє, що використовується лише невелика кількість пам'яті. Розчарування.
narco

79
Добре подумайте, що ви відредагували MyFoodTracker: P
Сем Соффс

8
Чому MyFoodTracker закреслена червоною лінією на скріншоті?
Marián Černý

2
@LogicsaurusRex "Що це означає?" насправді не є корисним питанням, але "чи потрібно це виправити?" це, можливо, краще питання (на яке я хотів би відповісти). Моя програма, здається, працює нормально, але показує цю помилку. Я хотів би це зафіксувати і виправити, але це не маленьке додаток, і знаходження цього коштуватиме мені дорогоцінного часу.
vrwim

Відповіді:


144

На основі https://forums.developer.apple.com/thread/15683 :

Змініть "Місце локального регіону розвитку " info.plistна "США" замість en.

Оновлено: тоді ви можете повернути ці зміни назад.


3
Це працювало і для мене. Потім я повернув налаштування на "en" і помилка, здається, не повертається.
Skoua

Він працював для мене як НОВИЙ екземпляр цієї помилки. Тут я розмістив оригінальний пост і отримував цю помилку через одну з прапорців для малювання. Її вже давно не було, а тепер знову почали обрізати з якоїсь іншої невідомої причини, і змінивши це, фактично виправили це ... СВЯТА КОРА, що це приголомшливо.
Logicsaurus Rex

Міна встановлена ja, ні en. Що я повинен зробити? Встановити Japan?
Nicolas Miari

1
Це спрацювало. Однак повернуто назад до en знову і без помилок 😒
Neo Ighodaro

30
Мені не дуже подобаються такі відповіді. Бо це нічого не пояснює. Це помилка на XCode? Чи неправильно наше позиціонування коду? Або що?
GeneCode

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
Це видалило помилку консолі для мене, але основна помилка блокування, яку я намагався виправити, яка виникає водночас, не допомогла
Джейсон

Можливо, можна узагальнити цю відповідь, я отримав свою під час виконання segue в uialertcontroller (майже той самий код). Напевно, це стосується того, як контролер сповіщення виходить із картини. Також вирішено мою проблему з dispatch_async.
user3802077

тут же проблема - конкретно, це відбувається в 9.2 симуляторі, коли ви переходите до системних налаштувань з мого додатка через обробник для UIAlertAction зсередини UIAlertController. Коли я переписав код на UIAlertController замість старого UIAlertView, sim викинув ті самі помилки _BSMach (15,20). Не відбулося на реальному пристрої (ipad). Dispatch_async зробив тренажер щасливим. Виразно пов'язаний з UIAlertController.
Майк Коган

ця ж проблема знову викликала голову, на цей раз не в сім, а на ipad, а не в SIM. Цього разу саме якийсь код перетворив перегляд у pdf-контекст, який спричинив макери. знову виправлено dispatch_async. Я також переконався, що при виконанні цього коду без виклику в обробника завершення UIAlertAction в UIAlertController ця помилка не виникає. в обох моїх випадках помилка була помітна лише на консолі налагодження XCode, і додаток продовжував правильно виконувати. Жодна із запропонованих на цій темі локалізаційних ідей не мала жодного впливу на будь-який сценарій.
Майк Коган

@Jason У мене був такий самий випуск, він видалив повідомлення про помилку консолі, але воно все одно виходить з ладу. Вам вдалося якось вирішити це?
bp14

32

Гаразд, я не зафіксував це повністю, але це дозволить вам отримати 99% шляху. Я використовую сторонне керування картою від ESRI, і щось про нього не подобається одному з цих параметрів малювання в Інспекторі атрибутів. Я не пробував кожного налаштування окремо, щоб побачити, яке це налаштування, але коли я вимкнув їх усі (у червоному полі), все працювало як шарм, і я кинув отримувати повідомлення про помилку вище в консолі. Якщо і коли у мене з’явиться час привести його до точного налаштування або комбінації налаштувань, я оновлю відповідь.

введіть тут опис зображення


Я думаю, що ваша відповідь досить гарна. Однак я б видалив жирний текст вгорі. Останнім часом було дуже багато анонімних відгуків, я сумніваюся, що це щось особисте.
Джейсон Д

Що робити, якщо мені доведеться використовувати одне з них?
Заракі

15

Це божевільно, але для мене рішенням було просто видалити всі точки точки переривання у файлі, де сталася помилка.

Що стосується причини? Я думаю, що я випадково натиснув клавішу швидкого доступу, щоб створити точку перерви в поточному рядку. Оскільки це було ненавмисно, я знову натиснув ту саму клавішу швидкого доступу, щоб видалити її.

О мій дорогий XCode ...


Це працювало для мене. Одним із підказок, що це проблема, було те, що Xcode ламається на лініях, які не мали точки перелому. Потім у іншому рядку я отримав _BSMachErrors вище.
діджей

12

Я отримував ті самі помилки ...

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

Я дзвонив openURL () від a UIAlertAction

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)

Помилка сталася, коли кнопка була використана для подання нових даних. A 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. Знайдіть info.plistфайл, присутній у папці ProjectNameTests.
  3. Змініть значення Localization native development region keyдля будь-якого конкретного регіону, наприклад, Об'єднане Королівство

Крок 1 і 2

Крок 3


Так, це виправлення звучить божевільно, але воно працює. Для мене додаток працювало, коли Xcode 7.3.1 розгортався на прив'язаний iPod touch 5-го покоління. Але коли я вперше розгорнувся з Xcode на прив'язаний iPad Air, я зіткнувся з цим BSMachError. Переключення області на United Statesпомилку усунуто. Ще одна незрозуміла таємниця Xcode.
Василь Бурк

4

Я також зіткнувся з тією ж проблемою в NSOperation, що працює на фоновому потоці, і я все ще отримував цю помилку, тому що UIAlertController все ще видаляв себе, як намагалася відбутися інша транзакція з інтерфейсу користувача. Змінення мого коду до цього вирішило проблему.

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

Багато людей не знають про відстрочку - вона дозволяє завершити поточний обсяг, а потім працює після. Якийсь акуратний.


4

Я зіткнувся з тією ж помилкою недійсної можливості (20) та недійсного імені (15). Я спробував рішення, як згадували інші, такі як:

  • Локалізація власного регіону регіону розвитку ключовий у info.plist
  • Зміна налаштувань малювання в інспекторі атрибутів
  • Навіть змінений словник винятків ATS у info.plist

Але жодне з цих рішень не вирішило моєї проблеми. Насправді я намагався поділитися деяким документом, але генерування документа зайняло б деякий час і хотіла показати користувача 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;
    }];
});
});

Чудово, працювали для мене! Важливо знати, що оновлення користувальницького інтерфейсу повинно здійснюватися у dispatch_get_main_queue ()
MkaysWork

3

Змінення рядка локалізації з en на Сполучені Штати вирішило це для мене. Однак переконайтесь, що ви очистили, змінивши Info.plist. Я помітив, що оновлення не працюють, коли ви просто збираєтеся після внесення змін до списку.введіть тут опис зображення



2

Я міг би відтворити помилку для мене: Якщо внесення змін до одного з переглядів у межах представлення, яке я фактично закриваю (popViewControllerAnimated), я отримую помилку.

У мене є дія UINavigationButton, яка робить асинхронну задачу (POSTRequest). Перш ніж виконувати цей запит, я встановив 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 на нуль:

/* 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, а потім переробити. Після того, як пристрій змінив орієнтацію, я зателефонував viewDidAppear знову, щоб зробити перегляд speedGraph і всі його підзагляди викласти заново і перемалювати. Виклик setNeedsDisplay для speedGraph не працює зі змінами орієнтації та підвідними підглядами у представленні.

Що я зробив неправильно, що спричинило появу помилки. У viewDidAppear я називаю метод, який робить деякі обчислення та додає підпогляди до подання speedGraph. Проблема полягала в тому, що ці підперегляди були створені у методі та були додані до подання speedGraph у цьому методі. Після виходу з методу посилання на ці підперегляди, звичайно, видаляються, але підпогляди у вікні speedGraph залишаються, оскільки вони додані. Коли пристрій змінюється, підгляди створюються заново і додаються до перегляду speedGraph, який вже має ці підгляди, але більше не може знайти посилання на ці підгляди. Масив підвидів перегляду speedGraph стає довшим і довшим із (я думаю) звисаючими підглядами.

Я вирішив проблему, визначивши підзагляди, які будуть додані до виду speedGraph як властивість класу, а потім зробити те, що потрібно зробити з представленнями всередині цього методу. З цією зміною проблеми не було.


2

Оскільки ми можемо розміщувати всі ситуації, що повертаються однією і тією ж помилкою, я міг розмістити свою :). Я отримав помилку, коли змінив налаштування конфіденційності у фоновому режимі. Мій додаток відкрив додаток налаштувань, щоб користувач міг надати йому дозвіл на свою фотобібліотеку, коли встановлений перемикач дозволів додаток виходить із зміненої помилки:

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

Це здається примусовим перезавантаженням програми через ОС, оскільки користувач змінив те, що може отримати доступ до вашої програми. Тож у моєму випадку це дія ОС, що спричинило помилку.


Я отримав і цей. Тож це насправді не помилка. Якщо додаток не підключено до Xcode, нічого страшного не станеться. Дякую, брато, ти можеш просто заощадити години мого часу налагодження.
yuji

1

Я отримав таке ж повідомлення про помилку, тому що я властивість , якassignobject@property (assign, nonatomic) NSNumber *aVariable; , виправлений зміною на strong.


1

Для чого це варто - здається, що багато ситуацій кидають цю помилку. У моєму випадку я опублікував попередження, коли користувач відхилив форму введення даних, а дані були у формі. Мені вдалося усунути помилку, програмуючи відставку першого відповіді з усіх застосовних полів перед відкручуванням контролера перегляду.


З цією проблемою у мене теж є проблема, але оскільки контролер перегляду відхиляється кнопкою "назад" з панелі навігації контролера, prepareForSegue()не дзвонить, і я не знаю, куди подати відставку першого респондента.
TimSim

1

Це я бачив, коли натискав Homeкнопку під час UIAlertControllerвідображення a , яку було відхилено, коли я перезапустив програму. Я додав код, щоб відмовитись UIAlertControllerу appDelegate:

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

і повідомлення про помилку зникло.


1

У мене виникла помилка під час відхилення переїзду через делегата. У delegateMethod я запустив деякі GUI-речі. Встановлення GUI-Stuff в завершенняБлок відпускуViewControllerAnimated виправив його.

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

1

Я новачок у цьому, тому прийміть це за те, що воно варте.

Для мене це вирішило - змінити модельовані показники> розмір> на iPad на весь екран. Усі мої перегляди ВИКЛЮЧАЄМО для того, хто викинув цю помилку, ми встановили iPad на весь екран. Коли я його змінив, помилка пішла ...


1

Причина, чому деякі розробники не отримують помилку, повернувшись після переходу з "Сполучених Штатів" на "en" (або) інший регіон, - це невідповідність між переглядами "Список властивостей" та "Вихідний код". Це, ймовірно, помилка Xcode. Кожного разу, коли між цими двома поглядами буде невідповідність, ця помилка викине, як би вона не була "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 //
      }

а потім використовував підказку для моїх тривожних дзвінків. Це вирішило проблему.

Тож виявляється, що це питання про терміни.


Я боюся, він працював лише деякий час, а потім знову з’явився - тому коментуючи випадок 1, а потім викликаючи це сповіщення пізніше, здається, це вирішило проблему.
Джеремі

0

з Xcode 8.1 та iOs 10 я також стикався

_BSMachError: (os / kern) непрацездатність (20)

_BSMachError: (os / kern) недійсне ім'я (15)

намагаючись замінити var UiTraiCollection, щоб змінити під час виконання класів iPad величину, щоб мати дві різні схеми інтерфейсу в Portraid та Landscape. Він працював без жодних збоїв, але генерував наші помилки.

Це був код "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 як альтернатива для виявлення обертання інтерфейсу.

Сподіваюся, це комусь стане у нагоді


0

У моєму випадку причина помилки була пов'язана із зміною розміру. Вбудований у ІБ. Все, що може змінити розмір текстового поля або подібне, наприклад, зміна довжини рядка, може призвести до цієї помилки, я вважаю. У моєму випадку мені просто довелося змінити розмір текстового поля, щоб охопити всі можливості, щоб не потрібно було змінювати розмір поля і конфліктувати з чимось іншим.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.