2012-01-28 39 views
12

Estoy tratando de agregar una fuente personalizada a mi proyecto en Xcode 4.2, pero cada vez que intento usarlo, aparece el error de que el objeto es nulo.UIFont con fuente personalizada falla con Nil

he hecho lo siguiente:
1) agrega una fila a mi .Plist 'Fuentes proporcionadas por la aplicación' valor: "LCDMono2 Ultra.ttf"
2) Se ha añadido la fuente a mi archivos de apoyo y mostró que en XCode para verificar que fue agregado.
3) verificado usando Obtener información de que el nombre completo es "LCDMono2 Ultra"
4) creó la fuente de mi proyecto con:

UIFont *myFont = [UIFont fontWithName:@"LCDMono2 Ultra" size:16]; 

y he tratado de esta variante:

UIFont *myFont = [UIFont fontWithName:@"LCDMono2 Ultra" size:16.f]; 

5) Intenté usar el nombre de fuente (addObject:myFont.fontName), generando el error 'nil'.

¿Qué podría estar causando el error? ¿Podría ser algo así como el espacio en el nombre?

+3

Utilice '[UIFont familyNames]' para ver si su fuente en realidad está siendo "vista" por el sistema operativo. Eso al menos reducirá las cosas. He tenido algunos tipos de archivos de fuentes que iOS no reconocería. – smparkes

+0

@smparkes - ¡Acabo de hacer eso antes de leer tu respuesta! Y efectivamente, Xcode elimina el espacio automáticamente, y el nombre aparece como "LCDMono2Ultra" y funciona. ¿No es así siempre? Gracias. – wayneh

+1

Probablemente no Xcode. Esa es probablemente la forma en que el nombre de la fuente está codificado en el archivo de fuente. Una pequeña pista gratuita: iOS solo le permite cargar dos caras de una familia, por lo que si usa más de dos caras de una familia, deberá cambiar el nombre de la familia en cada cara para que sea único. Me tomó un tiempo rastrear ... – smparkes

Respuesta

12

El espacio en el nombre completo de la fuente fue eliminado automáticamente después de añadir a la proyecto. Revisé el archivo de fuente original y el espacio está allí, por lo que Apple no debe tratar con espacios. Cambié la referencia a "LCDMono2Ultra" y funciona.

+4

No es un "no quiero tratar con espacios", creo que está usando el nombre PostScript de la fuente. –

+4

David Dunham tiene razón. En general, si realmente va a codificar el nombre de una fuente en su código, siempre debe usar el nombre completo de PostScript para referirse a la fuente. (Es el nombre de PostScript en sí mismo que no permite espacios). Si no está seguro de qué se trata, instale la fuente en su Mac con Font Book, luego en Font Book, elija 'Preview ~ Show Font Info' para mostrar los distintos nombres, incluido el nombre PostScript. El nombre PostScript de "LCDMono2 Ultra" es 'LCDMono2Ultra'. – NSGod

+0

Sí, tienes razón. No instalé la fuente en mi sistema, así que no pude obtener esa información del libro de fuentes. Una vez que lo instalé, puedo ver el nombre Postscript. Gracias. – wayneh

2

Ha puesto un punto de interrupción y comprobado que está obteniendo un objeto UIFont válido para myFont. Vale la pena verificar esto, ya que lo más probable es que "LCDMono2 Ultra" sea realmente el nombre de la familia de fuentes y lo que quieras usar es algo así como "LCDMono2 Ultranormal" o "LCDMono2 Ultra-negrita". Abra su .ttf con Font Book y vea qué información le brinda.

Alternativamente, si no se puede encontrar nada en el Catálogo Tipográfico se podría intentar llamar:

NSArray *fonts = [UIFont fontNamesForFamilyName:"LCDMono2 Ultra"]; 

Y a continuación, sólo la impresión de las fuentes de la matriz en el depurador para comprobar lo que deberían ser.

Esperanza esta ayuda, que me haga saber si esto no funciona y voy a tratar de pensar en otra cosa :)

+0

Gracias, pero encontré la solución - vea mi comentario anterior. – wayneh

8

Tuve exactamente el mismo problema durante unas horas e intenté todo lo anterior y ninguno funcionó, la fuente se agregó a todas partes e incluso probé fuentes que funcionaban en otras aplicaciones, pero nunca apareció agregado a esta aplicación.

Parece que algo ha cambiado en Xcode 5, la fuente debe agregarse en las propiedades de destino en la pestaña de información para que esto funcione, mientras que anteriormente tenían que agregarse en la imagen de "appName-info.plist" a continuación:

Espero que esto ayude a alguien más.

enter image description here

+0

Importante: agregue el nombre completo del archivo, con la extensión. –

0

Encuentra su fuente (tal vez con otro nombre) y utiliza este nombre.

for (NSString *familyName in [UIFont familyNames]) { 
     for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) { 
      NSLog(@"%@", fontName); 
     } 
    } 
0

Mi archivo de fuente es "Futura Heavy.ttf", luego uso - reemplazando el espacio como a continuación, ¡entonces funciona!

class func futuraHeavy() -> UIFont { 
     return UIFont(name: "Futura-Heavy", size: 12)! 
    } 
Cuestiones relacionadas