2

Bir Bugün Uzantısı yapmaya çalışıyorum ve ana uygulamada favorite doğru şekilde yazılıyor ve hem ar hem de ar2'dan okunuyor. favorite, Book sınıfının bir özelliğidir. Ancak, Bugün Uzantısı'nın tüm Book nesnesinin bir dizisinin favorite özelliğine erişmeye çalıştığımda, hem ar hem de ar2 boştur.NSUserDefaults Bugün için yüklenmiyor Extension (Swift)

ana uygulaması:

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"); 
     } 
    } 

Çıktı:

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

Bugün Uzatma:

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") 
       } 
      }) 
     } 
    } 

Çıktı:

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

cevap

1

standardUserDefaults, her iki hedef için de aynı kullanıcı varsayılanlarını döndürmez. Uygulama grubu oluşturup NSUserDefaults(suiteName: "group")

+0

'u kullanmanız gerekir. Bugün Uzantısı için "group.com.TodayExtension" uygulama grubum var. – stumped