2

Я пытаюсь сделать Today Extension, и в главном приложении favorite правильно записывается и считывается как с ar, так и с ar2. favorite является собственностью класса Book. Однако, когда я пытаюсь получить доступ к свойству favorite массива всех Book объектов из Today Extension, оба ar и ar2 пустые.NSUserDefaults не загружается для Today Extension (Swift)

основное приложение:

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 

ответ

1

standardUserDefaults не возвращает одинаковые значения по умолчанию для обоих целей. Вы должны создать группу приложений, а затем использовать NSUserDefaults(suiteName: "group")

+0

У меня есть группа приложений «group.com.TodayExtension» для Today Extension. – stumped