Ho appena aggiornato un progetto per utilizzare ARC con lo strumento di conversione integrato Xcode 4.2. Sfortunatamente c'è un bug strano che non capisco e non ho trovato nulla. Ho una classe documento con una dichiarazione di proprietà:ARC e proprietà IBOutlet deboli
@property (weak) IBOutlet WebView *webView;
Nel file di implementazione Ho un comunicato @synthesize:
@synthesize webView=_webView;
Quando provo a compilarlo, non riesce e mi dice:
error: @synthesize of 'weak' property is only allowed in ARC or GC mode
Ovviamente il progetto viene taggato per compilare con ARC. Apprezzerei molto qualsiasi aiuto per capire cosa sto facendo male e perché.
Modifica: Era in ritardo ieri. Così qui è una più completa compilazione del registro:
[...] -fobjc-arc -Wno-trigraphs -fpascal-strings -O0 -Wmissing-prototypes -Wreturn-type -Wparentheses -Wswitch -Wno-unused-parameter -Wunused-variable -Wunused-value -Wshorten-64-to-32 -DDEBUG=1 -isysroot /Developer/SDKs/MacOSX10.7.sdk -fasm-blocks -mmacosx-version-min=10.7 -gdwarf-2 -Wno-sign-conversion "-DIBOutlet=attribute((iboutlet))" "-DIBOutletCollection(ClassName)=attribute((iboutletcollection(ClassName)))" "-DIBAction=void)attribute((ibaction)" -iquote [...]/Build/Intermediates/[...].build/Debug/[...].build/[...]-generated-files.hmap -I[...]/Build/Intermediates/[...].build/Debug/[...].build/[...]-own-target-headers.hmap -I[...]/Build/Intermediates/[...].build/Debug/[...].build/[...]-all-target-headers.hmap -iquote [...]/Build/Intermediates/[...].build/Debug/[...].build/[...]-project-headers.hmap -I[...]/Build/Products/Debug/include -I[...]/Build/Intermediates/[...].build/Debug/[...].build/DerivedSources/x86_64 -I[...]/Build/Intermediates/[...].build/Debug/[...].build/DerivedSources -F[...]/Build/Products/Debug -fno-objc-arc [...]
Sembra il compilatore-impostazioni per ARC sono attivate all'inizio e spento più tardi nella lista argomenti. Per essere onesti: non so dove rimuovere le impostazioni così strane e come si è arrivati a questo. L'unica soluzione che avrei trovato ora sarebbe iniziare il progetto completo da uno vuoto e uno nuovo e importare tutti i file di classe da zero.
Se qualcuno conosce un modo più semplice, apprezzerei molto.
PS: Ho tutte le impostazioni di costruzione relative all'ARC impostato su SÌ.
Cosa succede quando si rimuove il (debole)? – Phlibbo
Controlla le impostazioni di compilazione. Fai clic sul tuo progetto nel navigatore di file, seleziona la scheda "Impostazioni di costruzione" e cerca "Conteggio di riferimento automatico". Quindi, assicurarsi che il campo per "Conteggio riferimenti automatico Objective C++" sia impostato su Sì. –
@Philibbo: Se rimuovo il debole e lo sostituisco con un assegnamento, tutto viene compilato. È giusto, quando presumo che questo file sembra essere escluso dall'ARC in qualche modo? – Jacque