Mam bibliotekę, która została skompilowana z kompilatorem LLVM 4.2 firmy Apple (Base SDK 6.1). W nim jest subskrybowanie obiektów.Subskrybowanie obiektów Objective-C, iOS5 i GCC
Wyobraź sobie, że moja biblioteka ma tylko jedną klasę z jedną metodą. Ta metoda umożliwia:
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]);
Teraz tworzę nowy projekt i łączę tę bibliotekę w. W mojej aplikacji deleguję tę metodę. Kompiluję tę aplikację za pomocą kompilatora GCC LLVM 4.2. Kompiluje i łączy dobrze.
Ta aplikacja będzie działać bez błędów w systemie iOS 6+. Ta aplikacja zawiesi się na iOS 5 w "Pierwsze użycie subskrypcji" (powyżej).
2013-07-03 09:15:51.050 GCCTest[167:707] -[__NSArrayI objectAtIndexedSubscript:]: unrecognized selector sent to instance 0x381fb0
Skompiluj go z kompilatorem Apple LLVM 4.2 i będzie działał normalnie.
objectAtIndexedSubscript:
to metoda publicznie dostępna w systemie iOS 6 i rozumiem, że to, do czego zostanie przetłumaczony cukier syntaktyczny z myArray[0]
.
Czy ktoś może mi pomóc zrozumieć, dlaczego widzę awarię z GCC, a nie Apple z iOS 5? Zgaduję, że ma to coś wspólnego z niektórymi makrami ... Czy można to zrobić, aby nie zawieść się z GCC bez edytowania kodu mojej biblioteki?
Czy używasz go na urządzeniu lub w symulatorze? – Monolo
@Monolo na urządzeniu. IPad 1 z 5.1.1, aby być dokładnym. –
Czy istnieje szczególny powód, że nie można używać kompilatora LLVM? –