@IBDesignable error: Ib Designables: Failed to update Auto layout status: Interface Builder Cocoa Touch Tool crashed

Mam bardzo prostą podklasę UITextView, która dodaje funkcję "Placeholder", którą można znaleźć natywnie w obiekcie pola tekstowego. Oto Mój kod do podklasy:

import UIKit
import Foundation

@IBDesignable class PlaceholderTextView: UITextView, UITextViewDelegate
{
    @IBInspectable var placeholder: String = "" {
        didSet {
            setPlaceholderText()
        }
    }
    private let placeholderColor: UIColor = UIColor.lightGrayColor()        
    private var textColorCache: UIColor!

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.delegate = self
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.delegate = self
    }

    func textViewDidBeginEditing(textView: UITextView) {
        if textView.text == placeholder {
            textView.text = ""
            textView.textColor = textColorCache
        }
    }

    func textViewDidEndEditing(textView: UITextView) {
        if textView.text == "" && placeholder != "" {
            setPlaceholderText()
        }
    }

    func setPlaceholderText() {
        if placeholder != "" {
            if textColorCache == nil { textColorCache = self.textColor }
            self.textColor = placeholderColor
            self.text = placeholder
        }
    }
}

Po zmianie klasy dla obiektu UITextView w Inspektorze tożsamości na PlaceholderTextView, Mogę ustawić właściwość Placeholder w Inspektorze atrybutu. Kod działa świetnie podczas uruchamiania aplikacji, ale nie wyświetla tekstu zastępczego w kreatorze interfejsu. Dostaję również następujące nieblokujące błędy (zakładam, że to dlatego nie jest renderowanie w czasie projektowania):

W związku z tym, że nie jest to możliwe, nie jest to konieczne, aby uzyskać więcej informacji na ten temat.]}

Error: Ib Designables: Failed to rendered instance of PlaceholderTextView: renderowanie widoku trwało dłużej niż 200 ms. Twój kod rysowania może cierpieć z powodu niskiej wydajności.

Nie jestem w stanie rozgryźć, co jest przyczyną tych błędów. Drugi błąd nie ma sensu, bo nie jestem nawet nadpisując drawRect (). Jakieś pomysły?
Author: Haroldo Gondim, 2014-12-09

21 answers

Istnieją raporty o awariach generowanych podczas awarii narzędzia Interface Builder Cocoa Touch. Tezy znajdują się w ~/Library/Logs/DiagnosticReports i noszą nazwę IBDesignablesAgentCocoaTouch_*.crash. W moim przypadku zawierały one użyteczny stack-trace, który zidentyfikował problem w moim kodzie.

 215
Author: Petter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-22 14:49:42

Miałem ten sam problem kilka razy. Oba razy zaczęło się, gdy ładowałem stalówkę IBDesignable na storyboard, gdy stalówka nie była w stanie zmieścić się na widoku(tj. Gdy naprawiłem, że xCode nadal dał mi błędy, więc ponownie uruchomiłem Xcode, aż losowo zamknąć dając mi błąd.

Mam nadzieję, że to pomoże.

UPDATE: właśnie zabiłem wszystkie procesy o nazwie "Interface Builder Cocoa Touch Tool", uruchomiłem ponownie Xcode i błąd zniknął. Nie wiem, czy to zawsze zadziała, czy nie.

 48
Author: Dustin Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-25 14:09:49

W moim przypadku robiłem następne w initwithframe / initwithcoder metody tworzenia widoku:

className = NSStringFromClass([self class]);
self.view = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];

Wygląda na to, że byłem nie powinien używać pakietu głównego , ale zamiast tego pakietu klasy. Więc podmieniłem ten kod na następujący i zadziałał:

bundle = [NSBundle bundleForClass:[self class]];
className = NSStringFromClass([self class]);
self.view = [[bundle loadNibNamed:className owner:self options:nil] firstObject];
Pomyślałam, że może to komuś pomoże.
 36
Author: jmoukel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-11 00:17:58

Możesz wybrać swój własny widok w Kreatorze interfejsów, a następnie użyć Editor, Debug Selected Views. Uruchomi tak zwaną sesję debugowania IBDesignableAgentCocoaTouch, gdy wszystkie punkty przerwania (w tym punkty przerwania WYJĄTKÓW) będą działać i będziesz mógł dokładnie określić miejsce, w którym twój widok ulegnie awarii.

 14
Author: Fyodor Volchyok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-06 20:23:52

Dla XCode8-Swift

Dodanie opcjonalnej wartości jako wartości domyślnej na @IBInspectable powoduje dla mnie problem.

To nie zadziała:

@IBInspectable var repeatImage:UIImage = UIImage(named:"myImage")!{
      didSet{
       // configureView
      }
}

To powinno zadziałać:

@IBInspectable var repeatImage:UIImage = RepeatImageView.getDefaultImage(){
        didSet{
           // configureView()
        }
}

class func getDefaultImage()->UIImage{
        if let defaultImage = UIImage(named: "myImage"){
            return defaultImage
        }else{
            return UIImage()
        }
}
 9
Author: Zaid Pathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-27 19:36:13

Miałem podobne problemy z tworzeniem interfejsów.

Przy użyciu techniki sugerowanej w tej ODPOWIEDŹ udało mi się wyśledzić problem do korzystania z literałów obrazu.

Rendering crash

self.backgroundImage.image =  #imageLiteral(resourceName: "rectangleCenter")

Brak awarii renderingu

self.backgroundImage.image =  UIImage(named: "rectangleCenter")
 9
Author: Nick Cross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-25 06:19:47

Właściwie jeśli masz jakieś Stare atrybuty zdefiniowane przez użytkownika (które nie są ważne dla bieżącego widoku) w dowolnym widoku w storyboardzie, które mogą spowodować awarię agenta.

Poza tym czasami zdarza się to tylko z powodu paskudnego błędu Xcode. Aby to sprawdzić, gdy jesteś w storyboard odznacz opcję Edytor > automatycznie odśwież widoki, a następnie przejdź do innego pliku, wyczyść i uruchom ponownie projekt. Po ponownym wejściu do storyboard możesz kliknąć edytor > odśwież widoki i sprawdzić znowu automatyczny. Ten też raz rozwiązał mój problem.

Jeśli oba nie działały, prawdopodobnie zrobiłeś coś złego z widokiem IBDesignable, więc wybierz awarię widoków w storyboard i debuguj, klikając edytor > Debuguj widoki

 5
Author: Yusuf Kamil AK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-31 19:15:59

W moim przypadku było to w jakiś sposób związane z frameworkiem Kartaginy, którego używałem. Musiałem dodać $(PROJECT_DIR) / Carthage / Build/iOS do Runpath Search Paths build setting

 3
Author: AkademiksQc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-08 12:45:41

W moim przypadku był to problem z OneSignal. Najwyraźniej mają błąd w wersji 2.2.0 i wyższej. Przełączyłem na 2.1.6 i znowu wszystko jest super!

Zobacz to .

 3
Author: PaulRBerg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-11 21:29:07

Miałem ten sam problem, ale rozwiązałem go dodając ' use_frameworks!'do PodFile twojego projektu.mam nadzieję, że to ci pomoże.

 3
Author: Jimmy Ng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-30 22:10:14

Tak nie jest w przypadku tego pytania, ale może pomogę komuś innemu.

Miałem podobny problem, gdy w mojej klasie @ IBDesignable nie zaimplementowałem obu:

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    // custom setup
}

override init(frame: CGRect) {
    super.init(frame: frame)

    // custom setup
}
 3
Author: tzaloga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-31 13:20:20

Kiedy to debugowałem, odkryłem, że istnieją pewne klasy, które modyfikują interfejs użytkownika. Zazwyczaj marquelabel, który jest podklasą UILabel lub innej podklasy UIView i rysowanie interfejsu użytkownika w czasie pracy i kolizji z silnikiem Autolayout. Spróbuj podać stałą szerokość lub wysokość dla tych niestandardowych widoków. Jeśli to nie rozwiąże Twojego problemu, wypróbuj następujące rozwiązania: -

Rozwiązanie 1: - Uncomment # use_frameworks wewnątrz pliku pod.

Rozwiązanie 2: - Spróbuj usunąć dane pochodne. 1. Zamknij Edytor okno twojego Xcode i zamknij symulator - > 2. Przejdź do Preferencje Xcode - > lokalizacje - > 3. Kliknij małą szarą strzałkę pokazującą pochodną ścieżkę danych - > 4. Wybierz swój projekt - > 5. Usuń wszystkie foldery wewnątrz -> 6. Quit Xcode and reopen

 1
Author: Ashish Pisey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-16 10:27:52

Dodaj go na dole Podfile i uruchom pod install

# Workaround for Cocoapods issue #7606

    post_install do |installer|
        installer.pods_project.build_configurations.each do |config|
            config.build_settings.delete('CODE_SIGNING_ALLOWED')
            config.build_settings.delete('CODE_SIGNING_REQUIRED')
        end
    end
 1
Author: Tissa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-09 12:52:22

Dodaj ten skrypt na końcu mojego Podfile i wykonaj pod install ponownie.

post_install do |installer|
    installer.pods_project.build_configurations.each do |config|
        config.build_settings.delete('CODE_SIGNING_ALLOWED')
        config.build_settings.delete('CODE_SIGNING_REQUIRED')
    end
end
 1
Author: Haroldo Gondim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-25 01:44:40

Uważam, że powodem jest to, że Twój xib nie jest tego samego rozmiaru, co projekt w storyboardzie. Upewnij się, że xib ma taką samą wysokość i szerokość.

 0
Author: user6476366,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-16 19:37:19

Właśnie brakowało mi tej linijki kodu platform :ios, '7.0' i problem został rozwiązany. Tylko ta linia w pliku pod i zaktualizuj problem pod zostanie rozwiązany.

 0
Author: Shahzaib Maqbool,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-08 12:54:50

Dla mnie był to brakujący certyfikat podpisywania, ponieważ nigdy nie uruchomiłem aplikacji, więc Xcode nie stworzył jeszcze certyfikatu. Po uruchomieniu aplikacji rendering IBDesignable działał dobrze.

 0
Author: florianpfisterer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-16 07:22:30

To tak, jakbyś dostał Kod od innego dewelopera i dostajesz ten błąd. Just run

pod install
To mi pomogło. Mam nadzieję, że to pomoże.
 0
Author: Dhruv Khatri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-28 14:20:36

Upewnij się, że nie inicjujesz bezpośrednio UIImage lub UIFont korzystanie z zasobów lub czcionek dodanych w projekcie.

Zawsze tworzę private func setUp() w moich klasach @IBDesignable custom UI. które nazywa się od init(frame: CGRect), init?(coder aDecoder: NSCoder). Więc w końcu zaktualizowałem setup() w następujący sposób.

private func setUp() {

     //... Doing initial configurations

     // iconImageView.image = UIImage(named: "IconImageName")! // Causing the Crash, use if let OR guard let instead
     if let icon = UIImage(named: "IconImageName") {
          iconImageView.image = icon
          iconImageView.frame.size = icon.size
     }

     // nameLabel.font =  UIFont(name: "Calibri-Light", size: 15.0) // Causing the Crash, use if let OR guard let instead
     if let font = UIFont(name: "Calibri-Light", size: size) {
          nameLabel.font =  font
     } else {
          nameLabel.font = UIFont.systemFont(ofSize: size) 
     }

     // Doing other stuffs
}
 0
Author: Sauvik Dolui,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 10:30:43

Głównym problemem jest to, że podczas tworzenia @ IBDesignable upewnij się, że plik cocoapod nie jest dołączony do Uitestów, inaczej spowoduje to awarię.

 0
Author: Modesto Cabrera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-09 12:37:50

Po prostu pozwól mu zbudować i uruchomić na symulatorze, jeśli masz błąd w innym miejscu w projekcie, po prostu skomentuj go i uruchom designable pierwszy, aby zaktualizować designable i odkomentować inne kody. Dla mnie działa.

 -1
Author: Daniel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-10 06:57:49