2015-04-26 7 views
8

Nella mia applicazione iOS im utilizzando una classe (DKTheme) per mantenere i miei font e le immagini in una posizione centralizzata. la mia implementazione sembra così.Xcode 6.3 (e 6.2) raggiunge il punto di interruzione su [UIFont fontWithName: size:]

+ (instancetype)theme { 
    static DKTheme *_theme = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     _theme = [[DKTheme alloc] init]; 
    }); 
    return _theme; 
} 

- (id)init { 
    self = [super init]; 
    if (self) { 
     [self setupTheme]; 
    } 
    return self; 
} 

- (void)setupTheme { 
// some code here 
self.smallButtonFont = [UIFont fontWithName:@"Helvetica-Bold" size:13.0f]; 
//some code here 
} 

E quando ho eseguito questo codice in un dispositivo (iPhone 5C, iOS8.3 e iOS8.2), Xcode colpisce punto di interruzione sulla linea self.smallButtonFont = [UIFont fontWithName:@"Helvetica-Bold" size:13.0f]; se clicco il tasto l'esecuzione continua, l'applicazione continua l'esecuzione senza schiantarsi e il mio carattere proprietà (self.smallButtonFont) inizializzata correttamente.

Breakpoint

Call Stack

e ho notato una cosa, ho diversi [UIFont fontWithName: size:]; chiamate e colpisce breakpoint solo di chiamata prima volta. (Se io commento la prima uno poi metodo di chiamata successiva colpisce il punto di rottura) . è davvero fastidioso questo problema, qualsiasi aiuto sarebbe grato.

+0

Sembra che tu abbia accidentalmente messo una pausa punto. Succede a me tutto il tempo. Vedrai un'icona sulla sinistra, area grigia dell'editor di testo sulla linea che si ferma (riga UIFont). Fai clic con il tasto destro sull'icona e premi Elimina punto di interruzione. – Gasim

risposta

18

È stata aggiunta un'eccezione di punto di interruzione in Xcode e configurata per l'interruzione su tutti i tipi di eccezione, C++ e Objective-C. Il problema è che il codice C++ a volte utilizza eccezioni per situazioni non eccezionali. Può usarlo come una forma di controllo del flusso o restituire "fallimento" da una funzione.

A meno che non si abbia un'eccezione C++ specifica che è necessario eseguire il debug perché causa effettivamente un problema, probabilmente è meglio configurare tale punto di interruzione in modo che si interrompa solo sulle eccezioni Objective-C e non sulle eccezioni C++. Le eccezioni C++ possono essere tranquillamente ignorate.

+0

Sì, questo è stato il problema, ho modificato il punto di interruzione Eccezione e selezionato Obiettivo c, quindi il problema è scomparso. e ho notato se seleziono Tutte le eccezioni alcune volte i colpi di breakpoint sul file 'main.m'. –

1

Inizialmente. Ovviamente è un punto di rottura di eccezione. Puoi aggiungerlo o eliminarlo nella "Scheda Breakpoints". Il mio screenshot può aiutarti con questo.

enter image description here

Motivo della generazione questo eccezioni:

Hai alcuni font di default in iOS. Se si tenta di generare affetto con il nome del font non disponibile. Vedi un'eccezione come questa. Forse nel tuo codice usi un altro nome di font. Intendo non solo @ "Helvetica-Bold". E ora hai una domanda: come posso, è disponibile il font nel mio sistema operativo. È possibile stampare tutti i tipi di carattere disponibili utilizzando questo metodo:

- (void)fontsList 
{ 
    NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]]; 
    NSArray *fontNames; 
    NSInteger indFamily, indFont; 
    for (indFamily=0; indFamily<[familyNames count]; ++indFamily) { 
     NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]); 
     fontNames = [[NSArray alloc] initWithArray:[UIFont fontNamesForFamilyName:[familyNames objectAtIndex:indFamily]]]; 
     for (indFont=0; indFont<[fontNames count]; ++indFont) { 
      NSLog(@" Font name: %@", [fontNames objectAtIndex:indFont]); 
     } 
    } 
} 

Cordiali saluti. E per favore aggiungi alcune informazioni se hai ancora questo problema.

+0

Vedere il mio post sul blog per un codice più semplice per iterare i nomi di font/famiglia in ordine alfa https://gilesey.wordpress.com/2015/01/14/ios-spritekit-font-loading-times-of-sklabelnodes/ – GilesDMiddleton

0

Ho avuto anche questo problema e l'ho risolto senza modificare le impostazioni del punto di interruzione. Nel mio caso, il problema era che la mia app aveva un framework il cui file info.plist elencava un font fornito che era anche elencato come font fornito dall'app stessa (nel Fonts provided by application). La rimozione del duplicato ha risolto questo problema.

3

Ciò accade sempre quando è stato aggiunto il punto di interruzione Tutte le eccezioni. Qui, è necessario aggiungere solo il punto di interruzione dell'obiettivo-c. le seguenti operazioni:

  1. Seleziona punti di interruzione debugger, fare clic destro su "tutte le eccezioni".

enter image description here

  1. Ora seleziona clicca su "Modifica punto di interruzione"

  2. Cambia eccezione di tipo a "Objective-c eccezione"

enter image description here