Facendo qualche debug Ho stampato la descrizione di una variabile NSDictionary che conferisce a questo:(NSDictionary *) labelAttrs = 0x00000001
(NSDictionary *) labelAttrs = 0x00000001
Qualcuno può chiarire il motivo per cui questo è 1
?
Capisco nil
o un puntatore all'oggetto ma perché 1
?
UPDATE
Il codice:
NSDictionary *labelAttrs = @{NSForegroundColorAttributeName:[UIColor darkGrayColor]};
Si blocca quando viene eseguito su iOS5, ma non iOS6 ma questo:
Are the new object literals backwards compatible with iOS 5?
sembra dire che è possibile utilizzare i nuovi letterali con iOS5 (a patto che si costruisca contro iOS6 e si usi Xcode> = 4.5 e si compili con l'ultimo LLVM - ad es. veda lo screen grab). E, secondo Apple, dovrei essere OK per usarli: https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/ObjCAvailabilityIndex/index.html
Ecco come appare in Xcode prima:
Poi, quando ho scavalcare:
Nota: questo mi dà lo stesso c rash:
NSDictionary *labelAttrs = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], NSForegroundColorAttributeName, [UIFont fontWithName:CUSTOMFONT size:size], NSFontAttributeName, [NSNumber numberWithInt:0], NSStrokeWidthAttributeName, nil];
La rimozione di questa (e delle seguenti 2 righe di codice) indica che l'applicazione viene eseguita senza arrestarsi in modo anomalo. Ma ovviamente nessuna stringa attribuita.
AGGIORNAMENTO: risolto. Le stringhe attribuite non sono disponibili su iOS5 (almeno per UILabel): Is NSAttributedString available before iOS 6?
Questo è l'indirizzo di memoria –
Pubblica il codice che porta a questo valore. – rmaddy
È piuttosto strano, di solito gli indirizzi di memoria più bassi sono riservati al sistema operativo. –