2014-09-27 9 views
9

pracuję nad dużym projektem (nie ma sensu pokazywać żadnych rzeczywisty kod tak) i mam Zauważ, że pojawia się następujący komunikat w dziennikach:CoreText CopyFontsForRequest otrzymał błąd mig IPC

CoreText CopyFontsForRequest received mig IPC error (FFFFFFFFFFFFFECC) from font server 

Błąd pojawia się, gdy tylko załaduje się WebView. I myślę, że to winowajca za maleńkie opóźnienie.

Dlaczego tak się dzieje? Co mogę zrobić, aby to naprawić?


P.S. Próbowałem the suggested solution here, aby sprawdzić, czy było to coś specyficznego dla systemu, ale nie działało.


Więcej szczegółów:

  • podczas korzystania z AMEditorAppearance.carNSAppearance plik z projektu Appearance Maker pojawi się błąd. Wyłączenie go (= nie wczytywanie wszystkiego) powoduje, że błąd zniknie.

  • Nie obchodzi mnie komunikat o błędzie, poza tym, że powoduje pewne dziwne problemy z czcionkami. Na przykład. NSAlert panele z polami wejściowymi, pokazują zauważalne migotanie, a czcionka/tekst wydaje się raczej pomieszany, w pewnym sensie nie jestem pewien, czy potrafię dokładnie opisać. (Mogę zamieścić film z tym, że jeśli by pomóc)

Odpowiedz

3

Jest to prawdopodobnie związane z konfliktami czcionki systemowej i może być łatwo ustalony: książki

  1. Open Font
  2. wybrać wszystkie czcionki
  3. Przejdź do menu plików i wybierz "Sprawdź poprawność czcionek"
  4. Rozwiąż wszystkie konflikty czcionek (usuwając duplety).

Źródło: Andreas Wacker

+0

Hmm .. Próbowałem tego, ale nie zadziałało. Btw, problem nadal pozostaje ...: S –

2

Spowodowane jest to przez wywołanie NSFont fontWithFamily: o nazwisko argument, który nie jest dostępny w systemie z poziomu procesu renderer chrom jest. Gdy piaskownica Chromium jest aktywna, wywołanie to powoduje błąd CoreText, który obserwujesz.

Dzieje się tak podczas dopasowywania nazw rodzinnych czcionek CSS do zainstalowanych lokalnie czcionek systemowych.

Prawdopodobnie pracowaliście nad projektem opartym na Chromium. Więcej informacji można znaleźć w Chromium Bug 452849.

2

Odpowiedź od @ Abrax5 jest doskonała. Właśnie chciałem dodać moje doświadczenie z tym problemem i nie mógł zmieścić tego w komentarzu:

O ile mogę powiedzieć, ten błąd jest zgłaszany tylko przy pierwszej nieudanej próbie zainicjowania NSFont z nazwą czcionki, która jest niedostępne. NSFont Inicjatory są niepoprawne i zwrócą się w takim przypadku na numer nil, kiedy będzie można coś z tym zrobić.

Można sprawdzić, czy czcionka o podanej nazwie jest dostępna przy użyciu:

NSFontDescriptor(fontAttributes: [NSFontNameAttribute: "<font name>"]).matchingFontDescriptorWithMandatoryKeys([NSFontNameAttribute]) != nil 

Niestety, ten podnosi także błąd! Poniższa metoda nie działa, ale jest nieaktualny:

let fontDescr = NSFontDescriptor(fontAttributes: [NSFontNameAttribute: "<font name>"]) 
let isAvailable = NSFontManager.sharedFontManager().availableFontNamesMatchingFontDescriptor(fontDescr)?.count ?? 0 > 0 

Więc jedynym sposobem znalazłem sprawdzenia dostępności czcionką o podanej nazwie nie podnosząc tego błędu jest następująca:

public extension NSFont { 

    private static let availableFonts = (NSFontManager.sharedFontManager().availableFonts as? [String]).map { Set($0) } 

    public class func available(fontName: String) -> Bool { 
     return NSFont.availableFonts?.contains(fontName) ?? false 
    } 
} 

Dla Przykład:

NSFont.available("Georgia") //--> true 
NSFont.available("WTF?")  //--> false 

(Jestem chyba zbyt ostrożny z tym opcjonalnym tam stała i jeśli są tak skłonne można przekonwertować zwrócony [AnyObject] użyciu as! [String] ...)

Należy pamiętać, że ze względu na wydajność nie zostanie ona zaktualizowana, dopóki aplikacja nie zostanie uruchomiona ponownie, tj. Wszelkie czcionki zainstalowane podczas uruchamiania aplikacji nie zostaną dopasowane. Jeśli jest to ważny problem dla danej aplikacji, wystarczy włączyć stałe do nieruchomości komputerowej:

public extension NSFont { 

    private static var allAvailable: Set<String>? { 
     return (NSFontManager.sharedFontManager().availableFonts as? [String]).map { Set($0) } 
    } 

    private static let allAvailableAtStart = allAvailable 

    public class func available(fontName: String) -> Bool { 
     return NSFont.allAvailable?.contains(fontName) ?? false 
    } 

    public class func availableAtStart(fontName: String) -> Bool { 
     return NSFont.allAvailableAtStart?.contains(fontName) ?? false 
    } 
} 

Na moim komputerze available(:) trwa 0.006s. Oczywiście, availableAtStart(:) praktycznie nie ma czasu na wszystkie, oprócz pierwszego połączenia ...

Powiązane problemy