2012-07-27 6 views
9

Nuovo Xcode 4.4 è fuori e dovrebbe sostenere letterali come@YES letterali non funziona in iOS 5/Xcode 4.4

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

e dovrebbe Supporta anche @YES e @NO, che non funziona quando si mira all'ultimo iOS 5 (e precedente). Dopo compilarlo mostrare il messaggio di errore:

imprevisto nome del tipo 'BOOL': espressione previsto

So che si può risolvere il problema digitando @(YES) e @(NO). Ma voglio sapere il motivo per cui non funziona come previsto.

risposta

24

Il motivo è Apple dimenticato le parentesi qui:

#define YES    (BOOL)1 

Questo problema verrà risolto in iOS 6 SDK:

#define YES    ((BOOL)1) 

Nel frattempo è necessario digitare @(YES).

+0

Va notato che questo deve essere fatto dopo "#import " - se uno inserisce questi #definiti nel loro Prefix.pch, dovrebbe assicurarsi di importare Foundation in precedenza nel pch. –

9

This è utile per informazioni sui valori letterali.

Un commentatore su this answer sottolinea anche:

C'è una piccola cosa che vorrei mettere in guardia circa. Bool letterali non sono supportati anche a causa di questo. Tuttavia, una soluzione rapida che ho implementato stava aggiungendo questo per l'inizio di uno dei miei intestazioni comuni (in un progetto di iOS)

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

@ risposta phix23s sembra essere più al punto. Dovresti accettarlo.

Questa era la pena di aggiungere dai commenti:

Va notato che questo deve essere fatto dopo il #import. Se uno mette questi #defines nella loro Prefix.pch, devono assicurarsi di importare Fondazione precedenza nel PCH

+0

questa domanda si riferisce all'abbonamento, che è disponibile solo in iOS 6 perché è più che zucchero sintattico. numeri/bool/letterali di raccolta dovrebbero essere disponibili nelle versioni precedenti – wattson12

+0

Hmm - interessante - Ho appena convertito il mio progetto ios5.0 in nuovi letterali, e tutti tranne gli abbonati funzionano correttamente. –

+0

Sì, sembra che mi sia sbagliato su quel po '. Modifico lo –