2015-07-09 13 views
17

Sto usando il codice che ha funzionato con xCode7 Beta 2. Ho appena ottenuto la Beta 3 e ora sto ricevendo questo problema che sembra un bug xCode?Errore con: override public func observValueForKeyPath

Per una delle mie classi pubbliche ...

override public func observeValueForKeyPath... 

errore: Metodo non sovrascrive alcun metodo dalla propria superclasse

Così prendo il "override":

public func observeValueForKeyPath 
Errore

: Il metodo è in conflitto con il metodo della superclasse NSObject con lo stesso selettore Objective-C ha! Mi è stato mentito dal primo errore. Non verrà compilato in entrambi i modi.
Qualche aiuto per favore?

+0

Questo può sembrare rudimentale, ma hai pulito la cartella di costruzione (cmd-shift-k)? – Oxcug

+0

Questo non ha aiutato, ma la risposta di Matt (modifica NSObject in String) l'ha risolto. –

risposta

21

Modificare [NSObject:AnyObject] nella dichiarazione a [String:AnyObject].

+1

Grazie a quello ha funzionato, mi dispiace per la domanda noob, ma apprezzo molto l'aiuto. –

+0

@Armand usa solo il completamento del codice per inserire la firma corretta per te. Questa non è scienza missilistica! – matt

+0

Non è ovvio scoprire, il mio completamento del codice non funziona. Vorrei che il fuzzy autocomplete e alcatraz possa essere riutilizzato presto. :( –

30

Se la definizione viene copiata da NSKeyValueObserving.h, la sovrascrittura sarà simile alla seguente.

iOS SDK 9,0

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
    //... 
} 

Prima di iOS SDK 9,0

override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject: AnyObject], context: UnsafeMutablePointer<Void>) { 
    // ... 
} 

Nota: Per i metodi come questo, di solito potete premere Cmd+Shift+O e andare direttamente al Apri rapidamente ... campo pop-up in cui qualsiasi definizione può essere copiata/incollata e Xcode lo cercherà all'interno del progetto/SDK. Guarda per l'ambito iOS in questo caso.

+0

Grazie mille. Non rendendo i parametri Opzionale è stato il colpevole e la tua risposta ha sicuramente aiutato – metpb

+0

sì +1 per i parametri che devono essere opzionali – vtcajones

+6

IOS: 10 override func observValue (forKeyPath keyPath: String ?, di oggetto: Any ?, modifica: [NSKeyValueChangeKey: Any] ?, contesto: UnsafeMutableRawPointer?) { –