2012-07-27 22 views
9

Nueva Xcode 4.4 está fuera y debe apoyar literales como@YES literal no trabajan en IOS 5/Xcode 4.4

@42
@"String"
@23.0L
@{ @"key" : obj } y
@[obj1, obj2]

y debe también es compatible con @YES y @NO, que no funciona cuando se dirige a iOS 5 (y versiones anteriores). Después de compilar que se muestre el mensaje de error:

nombre de un tipo inesperado 'BOOL': expresión esperada

Sé que se puede arreglar escribiendo @(YES) y @(NO). Pero quiero saber la razón por la cual no está funcionando como se esperaba.

Respuesta

24

La razón es de Apple se olvidó de los paréntesis aquí:

#define YES    (BOOL)1 

Este problema se solucionará en iOS 6 SDK:

#define YES    ((BOOL)1) 

Mientras tanto debe escribir @(YES).

+0

Debe tenerse en cuenta que esto debe hacerse después del '#import ' - si coloca estas #defines en su Prefix.pch, debe asegurarse de importar Foundation anteriormente en el archivo pch. –

9

This es útil para obtener información acerca de los literales.

Un comentarista de this answer también señala:

Hay una pequeña cosa que me gustaría advertir sobre. Los boles literales tampoco son compatibles con debido a esto. Sin embargo, una solución rápida que he implementado añadía esto al comienzo de una de mis encabezados comunes (en un proyecto IOS)

#ifndef __IPHONE_6_0 
#if __has_feature(objc_bool) 
#undef YES 
#undef NO 
#define YES __objc_yes 
#define NO __objc_no 
#endif 
#endif 

@ respuesta phix23s parece ser más al punto. Deberías aceptar eso.

Esta era la pena añadir de:

Cabe señalar que este necesita ser hecha después de que el import. Si uno pone estas #defines en su Prefix.pch, deben asegurarse de importar Fundación anteriormente en el PCH

+0

esa pregunta se refiere a la creación de subíndices, que solo está disponible en iOS 6 porque es más que azúcar sintáctica. número/bool/colección literales debería estar disponible en versiones anteriores – wattson12

+0

Hmm - interesante - Acabo de convertir mi proyecto ios5.0 a los nuevos literales, y todos menos la subscripción está funcionando muy bien. –

+0

Sí, parece que estaba equivocado sobre eso. Voy a enmendar –

Cuestiones relacionadas