2011-12-17 12 views
8

Cosa c'è di sbagliato con questo codice sotto ARC? Ottengo sopra errore:Errore ARC: i metodi init devono restituire un tipo correlato al tipo di ricevitore [4]

- (Moment *)initMoment:(BOOL)insert { 

if (insert) { 
    self.moment = [NSEntityDescription insertNewObjectForEntityForName:@"Moment" inManagedObjectContext:self.managedObjectContext]; 
    } else { 
    self.moment = [NSEntityDescription insertNewObjectForEntityForName:@"Moment" inManagedObjectContext:nil]; 
    } 
return self.moment; 
} 
+1

Sono confuso dal tuo obiettivo qui ... la tua funzione dovrebbe essere 'init'ing' Moment', quindi dovrebbe impostare un 'Moment' e restituire' self'. Quello che stai facendo qui è impostare una proprietà 'self.moment' con il valore di ritorno di aggiungere qualcosa a un modello di oggetto gestito ... –

+0

Uso il codice di qualcun altro (probabilmente non dovrebbe farlo). Ma ho anche provato "Moment * moment" e "return moment", ottengo lo stesso errore del compilatore – Chrizzz

+3

Giusto, ma tipicamente un init è qualcosa nella forma di '- (id) initWithInsert: (BOOL) insert {if (self = [super init]) {// setup} return self} 'Quando ritorni momento restituisci qualcosa che non è presente –

risposta

9

Il metodo init che è stato pubblicato nella questione era sotto forma sbagliata. Il metodo init dovrebbe (in genere) hanno la forma:

-(id)initWithParams:(BOOL)aBoolParam { 
    if (self = [super init]) { 
     //do stuff 
    } 
    return self; 
} 

Il problema con il codice di cui sopra è che è stato fatto come un metodo di classe, quindi se il manifesto voluto fare questo ha dovuto fare moment = [[Moment alloc] init] e restituirlo.

Problemi correlati