2014-09-27 9 views
9

Ho lavorato su un progetto BIG (non c'è alcun punto di mostrare alcun codice vero comunque) e ho notato che il seguente messaggio compare nei registri:CoreText CopyFontsForRequest ricevuto errore mig IPC

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

L'errore si apre non appena una WebView ha terminato il caricamento. E credo che sia il colpevole di un piccolo ritardo.

Perché sta succedendo? Cosa posso fare per risolvere questo problema?


P.S. Provato the suggested solution here per verificare se fosse qualcosa di specifico del sistema, ma non ha funzionato.


Maggiori dettagli:

  • L'errore viene visualizzato quando si utilizza il file AMEditorAppearance.carNSAppearance, dal progetto Appearance Maker. Disabilitandolo (= non caricando tutto) l'errore scompare.

  • Non mi interessa davvero il messaggio di errore, a parte il fatto che crea alcuni problemi strani con i caratteri. Per esempio. I pannelli NSAlert, con campi di input, mostrano uno sfarfallio notevole e il font/testo sembra piuttosto incasinato, in un modo che non sono sicuro di poter descrivere con precisione. (Ho potuto inviare un video con che se che avrebbe aiutato)

risposta

3

Questo è probabilmente legato a conflitti di font di sistema e può essere facilmente fissato:

  1. Open Font libro
  2. Seleziona tutti i font
  3. Vai al menu file e seleziona "Convalida caratteri"
  4. Risolvi tutti i conflitti di caratteri (rimuovendo i duplicati).

Fonte: Andreas Wacker

+0

Hmm .. Avevo provato questo ma non ha funzionato. A proposito, il problema rimane ancora ...: S –

2

questo è causato chiamando NSFont fontWithFamily: con un nome dell'argomento della famiglia che non è disponibile sul sistema dall'interno processo di rendering di Chromium. Quando la sandbox di Chromium è attiva, questa chiamata attiva l'errore di CoreText che stai osservando.

Accade durante l'abbinamento dei nomi di famiglia di caratteri CSS ai font di sistema installati localmente.

Probabilmente stavi lavorando a un progetto derivato da Chromium. Maggiori informazioni possono essere trovate in Chromium Bug 452849.

2

Risposta da @ Abrax5 è eccellente. Volevo solo aggiungere la mia esperienza con questo problema e non poteva inserirla in un commento:

Per quanto posso dire, questo errore viene generato solo al primo tentativo fallito di inizializzare un NSFont con un nome di font che è non disponibile. Gli inizializzatori NSFont sono disponibili e restituiscono nil in questo caso, in cui si ha l'opportunità di fare qualcosa al riguardo.

È possibile controllare se un carattere da un dato nome è disponibile utilizzando:

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

Purtroppo, questo solleva anche l'errore! Il seguente metodo non lo fa, ma è sconsigliata:

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

Quindi l'unico modo che ho trovato di verificare la disponibilità di un tipo di carattere di un nome senza sollevare tale errore è la seguente:

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 
    } 
} 

Per esempio:

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

(probabilmente sono eccessivamente prudente con quella costante opzionale lì e se siete così inclinato è possibile convertire il restituita [AnyObject] utilizzando as! [String] ...)

Si noti che, per motivi di efficienza, questo non verrà aggiornato fino a quando l'app non viene riavviata, vale a dire qualsiasi font installato durante l'esecuzione dell'app non verrà confrontato. Se questo è un problema importante per la vostra applicazione particolare, basta girare la costante in una proprietà calcolata:

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 
    } 
} 

Sulla mia macchina available(:) prende 0.006s. Naturalmente, availableAtStart(:) praticamente non ha tempo su tutti tranne la prima chiamata ...

Problemi correlati