2

我正在尝试制作今日扩展,并且在主应用程序中正确地写入和favorite读取了. 是类的属性。但是,当我尝试从 Today Extension访问包含所有对象的数组的属性时,两者和都是空的。arar2favoriteBookfavoriteBookarar2

主应用:

var favorite: Bool {
        get {
            let ar = NSUserDefaults.standardUserDefaults().stringArrayForKey("favorites") ?? []
            let ar2 = NSUserDefaults(suiteName: "group.com.TodayExtension")
            ar2?.synchronize()
            let tempVar = ar2?.stringArrayForKey("favorites") ?? []
            print("ar1: \(ar)")
            print("tempVar: \(tempVar)")
            return ar.contains {
                $0 == slug
            }
        }

        set {
            var ar = NSUserDefaults.standardUserDefaults().stringArrayForKey("favorites") ?? []
            let ar2 = NSUserDefaults(suiteName: "group.com.TodayExtension")
            let contains = self.favorite
            if (newValue && !contains) {
                ar.append(self.slug)
                ar2?.setObject(ar, forKey: "favorites")
                ar2?.synchronize()
            } else if (!newValue && contains) {
                let idx = ar.indexOf {
                    $0 == slug
                }

                if let idx = idx {
                    ar.removeAtIndex(idx)
                }
            }

            NSUserDefaults.standardUserDefaults().setObject(ar, forKey: "favorites");
        }
    }

输出:

ar1: ["Harry Potter", "Compound", "Nefarious"]
tempVar: ["Harry Potter", "Compound", "Nefarious"]

今日扩展:

func loadData(force: Bool, completion:(() -> Void)?) {
        DATA.fetchEateries(force) { (error) -> (Void) in
            dispatch_async(dispatch_get_main_queue(), {() -> Void in
                if let completionBlock = completion {
                    completionBlock()
                }

                self.books = self.DATA.books

                if self.books != [] {
                    for book in self.books {
                        if book.favorite {
                            print("I like it!")
                        } else {
                            print("I don't like \(book.name)")
                        }
                    }
                }
                else {
                    print("there are no books")
                }
            })
        }
    }

输出:

ar1: []
tempVar: []
I don't like Harry Potter
ar1: []
tempVar: []
I don't like Compound
ar1: []
tempVar: []
I don't like Nefarious
4

1 回答 1

1

standardUserDefaults不会为两个目标返回相同的用户默认值。您必须创建应用组,然后使用NSUserDefaults(suiteName: "group")

于 2016-03-20T20:40:45.740 回答