2012-09-15 3 views
8

sto usando xcode 4.4.1 per iOS target 5.1 ho iniziato il mio progetto usando ARC, e nel mezzo di il progetto ho aggiunto qualche fonte di terze parti non arc al mio progetto. a questo punto, ho deciso di provare il refactoring in xcode e si verifica un errore. proviene da uno dei miei sorgenti originali.refactoring to arc risultati in "sintetizzare la proprietà 'debole' è consentito solo in modalità arc o gc"

ho una proprietà di (nonatomico, debole) e l'ho sintetizzato ==> sintetizzare la proprietà 'debole' è consentito solo in modalità ARC o GC.

Sono sconcertato - sto usando arco e si lamenta che è consentito solo in arco ??

Al momento, ho rifattorato l'app di terze parti da altri progetti e l'ho copiato perché il mio progetto funzioni, ma quanto sopra è una domanda che mi piacerebbe ancora capire perché. Grazie! (a proposito, quando faccio converto ad arco, si dice che la destinazione attualmente utilizza ARC)

+0

Ho questo problema quando set 'weak' tipo di proprietà invece di 'assign' prima di migrare a ARC – poGUIst

risposta

-1

utilizzare invece:

@property(nonatomic,assign) 

* Nota - Questa non è la stessa come debole, ma molto simile . Debole imposta anche l'oggetto su zero, assegna no.

+0

Questo non è la risposta giusta, dato che assegnare non è la stessa cosa. Debole imposta automaticamente la variabile su zero quando è rilasciata. Assign non. – AppHandwerker

+0

Non sono uguali, perché debole non è un concetto nelle vecchie versioni di iOS. Nelle vecchie versioni di iOS che non consentono il più debole possibile, si assegna e si imposta la variabile su zero manualmente. – dacopenhagen

+2

Sì, ma il suo obiettivo è 5.1, quindi questa non è la risposta giusta. Sembra che il problema è che lo ha già configurato come progetto ARC e per qualche motivo sta cercando di convertirlo dopo. Questo genererà strani messaggi di errore come quello descritto. Ad esempio, se fa come dici tu e poi si converte in ARC, suggerirà di cambiarli in Debole :) dispari considerando che genererà un errore in anticipo se provi a convertirlo dopo aver già implementato ARC – AppHandwerker

2

Sembra che il problema sia che l'hai già impostato come progetto ARC e per qualche motivo stai provando a convertirlo di nuovo. Posso solo supporre che il processo non si aspetti quindi riferimenti deboli in questa fase. Se li imposti su Assegna quindi converti in ARC vedrai che suggerisce quindi di cambiarli in deboli.

1

Ho avuto lo stesso sintomo utilizzando Xcode 4.6.3 per il targeting di iOS 6.1. Ho portato una classe non ARC da un altro progetto e l'ho convertita tramite il menu Refactor solo per avere successive build fallite su una classe preesistente con l'errore che hai visto ("sintetizzare la proprietà 'weak' è consentita solo in arc o gc modalità").

Le proprietà del progetto dicevano chiaramente che era ancora un progetto ARC ma il compilatore sembrava aver dimenticato che questo era il caso della classe in questione.

Ho risolto il problema impostando la proprietà su "strong" e convertendo quella classe in ARC tramite il menu Refactor. Non sorprendentemente mi ha detto che non erano necessarie modifiche ma offriva un pulsante Salva che ho cliccato. Sono stato quindi in grado di riportare la proprietà a "debole" e compilare il progetto. (Presumo che alcuni metadati non siano sincronizzati da qualche parte lungo la strada.)

EDIT: alla fine ho dovuto "Refactare" altre classi ARC-compliant a ARC come se fossero compilate generando avvertimenti e causando arresti anomali nella mia app . Penso che la morale della storia sia che includere tutto il tuo progetto nel refactoring potrebbe essere più sicuro ...