Я использую KVO для свойства в подклассе PFObject
, который уже зарегистрирован во время инициализации.Класс должен быть зарегистрирован в registerSubclass перед использованием Parse
Все в порядке, если я использую 1 объект. На втором объекте я получаю ошибку The class KVO_vs_PFObject.MyModel must be registered with registerSubclass before using Parse.
Мне нужно несколько объектов для наблюдения за свойствами.
Я попытался использовать свойство observer(didSet)
в качестве альтернативы в swift, но компилятор не позволит мне, так как я использую управляемое свойство.
Кто-нибудь знает, что происходит с этим кодом?
Ниже мой код:
import UIKit
import Parse
class MyModel : PFObject, PFSubclassing {
static func parseClassName() -> String {
return "MyModel"
}
override class func initialize() {
var onceToken : dispatch_once_t = 0;
dispatch_once(&onceToken) {
self.registerSubclass()
}
}
@NSManaged var property1 : String?
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var myObject = MyModel()
myObject.addObserver(self, forKeyPath: "property1", options: .New, context: nil)
myObject.property1 = "Hello"
myObject.removeObserver(self, forKeyPath: "property1")
// If I comment these 4 lines. myObject is happy observing the property.
var anotherObject = MyModel()
anotherObject.addObserver(self, forKeyPath: "property1", options: .New, context: nil)
anotherObject.property1 = "World"
anotherObject.removeObserver(self, forKeyPath: "property1")
}
override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {
var n : AnyObject? = change["new"]
switch keyPath {
case "property1" :
println("observed MyModel.property1 with value \(n)")
default :
break
}
}
}
Спасибо за ответ @ Jitendra. Я попробовал appDelegate, но не работал. По-прежнему появляется ошибка при использовании с KVO во втором экземпляре. Первый экземпляр в порядке. Это просто вторая бомба. –
Извините, Эдгардо, в этом случае, я не уверен, что происходит. Когда я искал инициализацию, я помню, как читал, что класс должен ссылаться один раз до вызова инициализации. от вашего наблюдения, что он работает впервые, может быть, что-то не получается после инициализации(). мой код инициализации: переопределить класс func initialize() { struct Static { static var onceToken: dispatch_once_t = 0; } dispatch_once (& Static.onceToken) { self.registerSubclass() } } –