Ho una libreria compilata con il compilatore LLVM 4.2 di Apple (SDK di base 6.1). In esso c'è l'indice degli oggetti.Sottoscrittore oggetto Objective-C, iOS5 e GCC
Immaginate che la mia libreria abbia solo una classe con un metodo. Tale metodo fa questo:
NSLog(@"****** preTests");
NSDictionary *dictTest = @{ @1 : @1 };
NSLog(@"Initialized Dictionary");
NSArray *arrayTest = @[ @1, @2, @3 ];
NSLog(@"Initialized Array");
NSLog(@"****** arrayTest[1] = %@", arrayTest[1]); // First use of subscripting
NSLog(@"****** dictTest[@1] = %@", dictTest[@1]);
Ora creare un nuovo progetto e collegamento questa biblioteca nel Nella mia applicazione delegato, io chiamo questo metodo.. Compilare questa applicazione con il compilatore GCC LLVM 4.2. Compila e collega bene.
Questa applicazione verrà eseguita senza errori su iOS 6+. Questa applicazione si bloccherà su iOS 5 al "Primo utilizzo di subscripting" (sopra).
2013-07-03 09:15:51.050 GCCTest[167:707] -[__NSArrayI objectAtIndexedSubscript:]: unrecognized selector sent to instance 0x381fb0
Compilalo con il compilatore Apple LLVM 4.2 e funzionerà normalmente.
objectAtIndexedSubscript:
è un metodo reso disponibile pubblicamente in iOS 6 ed è a mia conoscenza che ciò che viene tradotto lo zucchero sintattico di myArray[0]
.
Qualcuno può aiutarmi a capire perché vedo un arresto anomalo con GCC e non Apple con iOS 5? Immagino che abbia a che fare con alcuni macro da qualche parte ... Potrebbe essere fatto per non andare in crash con GCC senza modificare il codice della mia libreria?
Lo stai eseguendo sul dispositivo o nel simulatore? – Monolo
@ Monolo su un dispositivo. Un iPad 1 con versione 5.1.1 per essere esatto. –
C'è un motivo particolare per cui non è possibile utilizzare il compilatore LLVM? –