2

今日の拡張機能を作成しようとしていますが、メインアプリではとのfavorite両方から正しく読み書きされています。クラスのプロパティです。ただし、 Today 拡張機能からすべてのオブジェクトの配列のプロパティにアクセスしようとすると、両方とも空です。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 に答える