2012-09-15 18 views
8

estoy usando xcode 4.4.1 para iOS objetivo 5.1 comencé mi proyecto usando ARC, y en medio de el proyecto He agregado una fuente de terceros no perteneciente al arco a mi proyecto. en este punto, he decidido intentar refactorizar en xcode y se produce un error. viene de uno de mis códigos fuente originales.refactorización a los resultados del arco en la propiedad "sintetizar de 'débil' solo está permitida en modo arco o gc"

tengo una propiedad de (no atómica, débil) y la he sintetizado ==> la síntesis de la propiedad 'débil' solo está permitida en modo ARC o GC.

Estoy confundido - estoy usando el arco y se queja de que solo está permitido en el arco?

Por el momento, he refabricado la aplicación de terceros de otro proyecto y la copié para que mi proyecto funcione, pero lo anterior es una pregunta que aún me gustaría entender por qué. Gracias! (por cierto, cuando lo hago convertir a arco, se dice que el objetivo actualmente utiliza ARC)

+0

Tengo este problema cuando establezco el tipo de propiedad 'débil' en lugar de 'asignar' antes de migrar a ARC – poGUIst

Respuesta

-1

utilizar en su lugar:

@property(nonatomic,assign) 

* Nota - Esto no es lo mismo como débil, pero muy similar . Débil también establece el objeto en cero, asignar no.

+0

Esto no es la respuesta correcta, como asignar no es lo mismo. Débil establece automáticamente la variable a cero cuando se lanza. Asignar no. – AppHandwerker

+0

No son lo mismo, porque la debilidad no es un concepto en las versiones anteriores de iOS. En las versiones anteriores de iOS que no permiten la debilidad, lo más cercano que se obtiene es asignar y establecer la variable a cero manualmente. – dacopenhagen

+2

Sí, pero su objetivo es 5.1, por lo que esta no es la respuesta correcta. Parece que el problema es que ya lo ha configurado como un proyecto de ARC y, por algún motivo, intenta convertirlo después. Esto arrojará mensajes de error extraños como el descrito. Por ejemplo, si hace lo que dices y luego se convierte a ARC, sugerirá cambiarlos a Débil :) impar, considerando que arrojará un error de antemano si tratas de convertirlo después de implementar el ARC. – AppHandwerker

2

Parece que el problema es que ya lo ha configurado como un proyecto ARC y está por algún motivo intentando convertirlo nuevamente. Solo puedo suponer que el proceso no espera, por lo tanto, referencias débiles en esta etapa. Si los configura en Asignar y luego convierte a ARC, verá que luego sugiere que los cambie a débiles.

1

Tuve el mismo síntoma usando Xcode 4.6.3 con iOS 6.1. Traje una clase que no es ARC de otro proyecto y la convertí a través del menú Refactor para que las compilaciones subsiguientes fallaran en una clase preexistente con el error que viste (la propiedad "sintetizar de 'débil' solo está permitida en arco o CC modo").

Las propiedades del proyecto claramente dijeron que todavía era un proyecto ARC pero el compilador parecía haber olvidado que este era el caso para la clase en cuestión.

He solucionado el problema estableciendo la propiedad en 'fuerte' y convirtiendo esa clase a ARC mediante el menú Refactor. Como era de esperar, me dijo que no era necesario realizar cambios, pero sí ofrecía un botón de Guardar en el que hice clic. Luego pude cambiar la propiedad a 'débil' y compilar el proyecto. (Estoy suponiendo que algunos metadatos se desincronizaron en algún momento).

EDITAR: Eventualmente tuve que 'Refactorizar' otras clases compatibles con ARC a ARC ya que aunque compilaron generaron advertencias y provocaron bloqueos en mi aplicación . Creo que la moraleja de la historia es que incluir todo su proyecto en la refactorización podría ser más seguro ...

Cuestiones relacionadas