2010-03-03 10 views
7

Non voglio arrendermi prima di chiedere, perché questa è una funzionalità di base in qualsiasi IDE Java/.Net. Il compilatore mi dice:Definizione metodo non trovato ... stub automatico con Xcode?

Incomplete implementation of class... 
Method definition for '-someMethod:' not found 

ma clic, clic destro, pregando e Google ricerca non mi hanno ottenuto per creare automaticamente uno stub da questo. Xcode può creare un metodo per me e portarmi lì?

In caso contrario, perché potrebbe essere (a parte "i veri programmatori si divertono a digitare")?

Edit: Ho pensato che opzione della fuga sostanzialmente risolto questo per me, ma non è così. Non sembra essere a conoscenza di tutte (nessuna?) Delle interfacce implementate dalla mia classe.

+0

'option-escape' (o solo' escape') ha sempre trovato il metodo per me, ma non l'ho testato con tutti gli scenari possibili. Non hai un errore di sintassi nel tuo file '.h', vero? Questo interromperà il completamento automatico. –

+0

@AbhiBeckert scusa, la domanda è chiedere un caso in cui il corpo del metodo NON ESISTE. –

+0

auto-complte non utilizza il corpo del metodo. Usa i file di intestazione. Una volta che un metodo è nell'intestazione, sarà disponibile nel completamento automatico ovunque, anche per scrivere l'implementazione del metodo. –

risposta

0

Ciò di cui l'OP (me) sta parlando è Java, in cui l'interfaccia è implicita. Tuttavia, il caso che è lo stesso in Xcode è quello in cui non esiste un metodo ancora definito in nessuna interfaccia.

AppCode gestisce questo caso, Xcode non lo fa (a meno che qualcuno risponde a questa domanda, ma è stato qui per un po '):

AppCode popover showing method creation

tardi: La gente ha risposto alla domanda, ma Xcode ancora non lo fa

4

Questa potrebbe essere un'opzione per presentare una richiesta di funzionalità ad Apple. Tipicamente, disegnerò il mio file @interface e poi eseguirò una copia/incolla dell'interfaccia @ in @implementation, mantenendo la digitazione al minimo assoluto.

Tuttavia, sarebbe bello poter fare clic sull'avviso e fare in modo che Xcode crei il metodo al botto di @implementation.

NOTA: è valida per mantenere il punto e virgola dopo la @implementation

@interface PCStackValue : NSObject <NSCoding, NSCopying> 
{ 
} 

- (id) initWithDisplayRadix:(int) newRadix; 

@end 

@implementation PCStackValue 

- (id) initWithDisplayRadix:(int) newRadix; 
{ 
    … do something; 
} 
@end  
+0

Davvero, il punto e virgola è ok? Per quanto riguarda le richieste di funzionalità di archiviazione con Apple, presumo che abbiano letto StackOverflow :) Il problema riguarda principalmente i metodi definiti in un altro protocollo che ho detto che implementerò. –

+2

La sequenza simulata viene ignorata nell'implementazione. Questa è stata una grande cosa in NextStep 3.2 (penso, avrebbe potuto essere 3.3) alcuni anni fa. Parecchi anni fa. –

+2

Ciao, sono del 2012 e penso che questo non sia stato ancora fatto :( –

1

Quello che stai cercando non esiste. Io uso solo il completamento automatico (di solito funziona per me) o copia/incolla.

Cosa ti fa pensare che Xcode abbia una funzionalità solo perché Eclipse ce l'ha? Eclipse ha ~ 10 anni, mentre Xcode ha ~ 23 anni. Probabilmente tutte le funzionalità copiate si troverebbero nell'altra direzione.

Tuttavia sarebbe una richiesta di grande funzionalità. Forse aprire il menu di completamento automatico su una riga vuota all'interno di @implementation .. @end potrebbe fornire un elenco di metodi non ancora implementati.

Ma non sono sicuro di quanto funzionerebbe nella pratica, a causa delle categorie NSObject. Potrebbero esserci letteralmente migliaia di di metodi "non ancora implementati" nel menu di completamento automatico. Ma potrebbe almeno mostrare alcuni dei più probabili.

Sembra che questo errore/avviso di compilazione sia anche un buon candidato per la nuova funzione "Correggi".

anche: imparare a digitare più velocemente: p

+1

L'esperienza recente con AppCode - difficilmente completa, ma piuttosto buona - dimostra quanto Xcode sia carente. 23 anni, si blocca ancora abbastanza regolarmente e non fa un sacco di cose fantastiche. Sto chiedendo, a proposito, e sì, può capirlo grazie a Strong Typing .... –

+0

Considerando che AppCode è 56MB e Xcode è 1.720MB ... Non sono sicuro se sia giusto confrontarli Certo che AppCode fa alcune cose piacevolmente, ma hanno il lusso di concentrarsi da vicino su un paio di caratteristiche individuali, senza dover pensare a tutti quelli che non hanno bisogno di scrivere. –

+0

L'elefante nella stanza è il possi la superiorità dei linguaggi gestiti, e potrei anche andare oltre e puntare a staticamente e fortemente tipizzato. Ovviamente è un dibattito quasi religioso, ma una cosa è certa: se Xcode ha dei limiti, non è perché non hanno abbastanza (o abbastanza buoni) programmatori che ci lavorano. Ma sto divagando ... –

2

non mi dispiace questo comportamento. Per uno, l'implementazione non esiste necessariamente in quanto potrebbe essere dinamica. Inoltre classifico il mio codice utilizzando il contrassegno #pragma - MyCategory e voglio le implementazioni in posizioni specifiche nel file di origine.

Tuttavia, sono d'accordo - non voglio digitare lo stub stesso.

È possibile farlo per metodo.
Passare al file di implementazione e iniziare a digitare - prefisso e premere ESC e si dovrebbero vedere completamenti validi corrispondenti al prefisso. È necessario iniziare digitando a - o + perché funzioni, ad esempio, rispettivamente, metodi e metodi di classe.

A volte non sai cosa devi implementare! Apri Issue Navigator e fai clic sul rettangolo di apertura. Ci dovrebbe essere una riga che dice Metodo dichiarato qui. Fare clic su di esso per vedere il metodo che manca di implementazione.

+0

Non sto parlando di metodi non implementati. Sto parlando di metodi che ancora non esistono in nessuna interfaccia. AppCode fa questo, a proposito. –