2015-07-09 1 views
17

Я использую код, который работал с бета-версией xCode7 2. Только что получил Beta 3, и теперь я получаю эту проблему, которая кажется ошибкой xCode?Ошибка с: переопределить public func observValueForKeyPath

Для одного из моих общественных классов ...

override public func observeValueForKeyPath... 

ошибка: Метод не отменяет любой метод из суперкласса

Так что я вынуть "переопределение":

public func observeValueForKeyPath 

ошибка: метод конфликтует с методом из суперкласса NSObject с тем же селектором Objective-C ha! Первая ошибка. Не будет компилироваться в любом случае.
Любая помощь, пожалуйста?

+0

Это может звучать рудиментарно, но вы очистили свою папку сборки (cmd-shift-k)? – Oxcug

+0

Это не помогло, но ответ мата (изменение NSObject на String) исправил его. –

ответ

21

Изменить [NSObject:AnyObject] в декларации [String:AnyObject].

+1

Спасибо, что сработал, извините за вопрос noob, но я очень благодарен за помощь. –

+0

@Armand просто использует код для ввода правильной подписи для вас. Это не ракетостроение! – matt

+0

Непонятно, что мой код не работает. Я хочу, чтобы нечеткие автозаполнения и alcatraz могут быть использованы снова в ближайшее время. :( –

30

Если определение скопировано с NSKeyValueObserving.h, ваше переопределение будет выглядеть следующим образом.

IOS SDK 9,0

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

До IOS SDK 9,0

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

Примечание: Для методов, как этот, вы можете обычно нажмите Cmd+Shift+O и перейти прямо к Открыть быстро ... всплывающее поле, где любое определение может быть скопировано/вставлено и Xcode будет искать его в проекте/SDK. Наблюдайте за областью iOS в этом случае.

+0

Большое спасибо. Не делая params Необязательно был виновником, и ваш ответ определенно помог. – metpb

+0

да +1 для параметров, которые должны быть опциональными – vtcajones

+6

IOS: 10 override func observValue (forKeyPath keyPath: String ?, объекта: Любой ?, change: [NSKeyValueChangeKey: Any] ?, context: UnsafeMutableRawPointer?) { –