2014-06-09 17 views
23

Sto cercando di dichiarare un inizializzatore designato come questo:NS_DESIGNATED_INITIALIZER prevede: (due punti)

- (instancetype)initWithDelegate:(id <MyDelegate>)delegate NS_DESIGNATED_INITIALIZER; 

Ma mi mostra questo errore di compilazione:

Expected ':' 

È interessante notare che quando provo a scriverlo come questo (link di riferimento: Adopting Modern Objective-C) -

- (instancetype)init NS_DESIGNATED_INITIALIZER; 

Essa mostra questo errore:

Expected ';' after method prototype. 

Qualche idea su come utilizzare correttamente NS_DESIGNATED_INITIALIZER?

+0

se 'cmd' + clic su' NS_DESIGNATED_INITIALIZER', che cosa si dà? –

risposta

33

NS_DESIGNATED_INITIALIZER macro non è definita nelle intestazioni di libreria per Xcode 5 - è necessario Xcode 6 per utilizzarlo. Nota il link dice "Pre-release".

La macro viene definita nel seguente modo (citando NSObjCRuntime.h)

#ifndef NS_DESIGNATED_INITIALIZER 
#if __has_attribute(objc_designated_initializer) 
#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) 
#else 
#define NS_DESIGNATED_INITIALIZER 
#endif 
#endif 

Nota è comunque possibile utilizzare

- (instancetype)initWithDelegate:(id <MyDelegate>)delegate __attribute__((objc_designated_initializer)); 

in Xcode 5 o si può aggiungere che la macro in modo esplicito per l'intestazione precompilata.

1

Tenete a mente che si può solo aggiungere che questo interfaccia o dichiarazioni di estensione di classe altrimenti si otterrà questo errore:

'objc_designated_initializer' attribute only applies to init methods of interface or class extension declarations