ile NSUserDefaults değişiklikleri algıla! Bu ben bu kodu ile benim veri alma WKInterfaceController bui elma saate veri aktarmak için uygulama grubu kullanabilirsiniz Projemde suiteName
let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
sharedDefaults?.setObject(MyData, forKey: "DataKey")
sharedDefaults?.synchronize()
gibi görünüm:
let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
let MyData = sharedDefaults?.objectForKey("DataKey") as! [[AnyObject]]
Tüm çalışmalar ince!
Şimdi ben sharedDefaults veri? .objectForKey ("DataKey") değiştirildi vermedi olmadığını saptamaya çalışır. (: "Group.com.myappname.defaults" suiteName) i NSUserDefaults Veriler değiştiğinde
override func willActivate() {
NSUserDefaults(suiteName: "group.com.myappname.defaults")!.addObserver(self, forKeyPath: "DataKey", options: NSKeyValueObservingOptions.New, context: nil)
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>){
print("Data Changed")
}
Ama "geçersiz kılma fonk observeValueForKeyPath" WKInterfaceController etkinleştirin zaman sadece arama ve arama vermedi: Ben yöntemini addObserver kullanmayı deneyin
Ayrıca ben NSNotificationCenter kullanmayı deneyin:?
override func willActivate() {
let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(userDefaultsDidChangeNotificationMethod(_:)), name: NSUserDefaultsDidChangeNotification, object: nil)
}
func userDefaultsDidChangeNotificationMethod(notification: NSNotification){
print("Data Changed")
}
O ben yanlış yapıyor ne (
çalışmıyor i algılamak nasıl f veri değişti mi? Herkes başka bir yol biliyorsanız
var NeedCheking = Bool()
override func willActivate() {
super.willActivate()
NeedChecking = true
CheckDefaults()
}
override func didDeactivate() {
NeedChecking = false
super.didDeactivate()
}
func CheckDefaults(){
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
repeat {
let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
let NewData = sharedDefaults?.objectForKey("DataKey") as! [[AnyObject]]
if NewData != self.MyData {
dispatch_async(dispatch_get_main_queue()) {
self.MyData = NewData
//Here do update actions!
}
}
sleep(2)
}while self.NeedChecking
}
}
, cevap olarak çözümünüzü gönderin:
Neden sadece NSUserDefaultsDidChangeNotification –
Leo Dabus değil, NSNotificationCenter.defaultCenter(). AddObserver (self, selector: #selector (self.Refresh (_ :)), name: "MyData", object: nil) ?? ? – Dmitry
'NSNotificationCenter.defaultCenter() addObserver (kendini, selector: #selector (kullanıcıDefaultsDidChangeNotificationMethod (_ :)), name: NSUserDefaultsDidChangeNotification, object: nil)' –