Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.

Widgetta UserDefaults senkronize sorunu

0 oy
29 kez görüntülendi
28, Mayıs, 28 ios development kategorisinde Selim tarafından soruldu

Merhaba Yasin Bey,

Uygulamamda bir adet TodayWidget hazırladım. Mantığı söyle; uygulamayı açan kişi bir ilçe seçiyor uygulama içinden. İlçe id yi aşağıdaki şekilde set ediyorum.

let defaults = UserDefaults(suiteName: "group.com.X.App")
defaults?.set(UserDefaults.standard.value(forKey: "Session_ilceId"), forKey: "ilceId")
defaults?.synchronize()

Widget kısmında aşağıdaki şekilde okuyup servis aracılığıyla idyi parametre geçirip okuyorum.

let ilceIdWidget = UserDefaults(suiteName: "group.com.X.App")
ilceIdWidget?.synchronize()
let Ilcesi = ilceIdWidget?.value(forKey: "ilceId") as? String

Bu işlemler sorunsuz çalışıyor, sorunum şu;

Uygulama açıkken ilçeyi değiştirdiğimde ve widgete geçtiğimde widget refresh olduğu halde hala eski idyi okuyor userdefaultstan. Bir türlü senkronize edemiyor. Uygulamayı kapatıp açtığımda ve widget e baktığımda yeni id geliyor. Senkronizasyonu nasıl yapabilirim?

1 cevap

+1 oy
28, Mayıs, 28 yasin tarafından cevaplandı
7, Haziran, 7 huseyinvural tarafından seçilmiş
 
En İyi Cevap

öncelikle, kullandığın suitename'i (group.com.X.App)

  • Developer portal'da uygulamanın AppID'si içerisine ekledin mi?
  • Projende bu appID'ile oluşturulmuş provizyon dosyalarını kullanıyorsun değil mi?
  • SuiteName'i hem widget'ın, hem de projenin targets/capabilities altında bulunan "app groups" alanına da tanımladın değil mi?

Bir de widget'da veriyi çekmeden önce yaptırdığın synchronize işlemi gereksiz.
olumsuz bir sonuç doğurabilir mi emin olamadım.
O nu kaldırıp bir denermisin. Şöyle yani;

let ilceIdWidget = UserDefaults(suiteName: "group.com.X.App")
let Ilcesi = ilceIdWidget?.value(forKey: "ilceId") as? String
28, Mayıs, 28 Selim tarafından yorumlandı

ilk 2 maddede tereddüt ettiğim için sertifikaları silip tekrar tanımladım ve kurdum. 3. madde evet, aksi halde uygulamadan widgete veri taşıyamazdım aynı grup ismiyle. 4. söylediğinizi de yaptım. Uygulamayı kapatıp açmadan uygulama içerisinde seçtiğim id aynı kaldığından widget güncellenmiyor hala Yasin bey.

28, Mayıs, 28 yasin tarafından yorumlandı

Hımm. Emin olamadım.
Aynı durumu simule edecek bir test hazırlamam lazım.
Ama ancak yarın buna vakit ayırabilirim.
Bu süre içerisinde eğer çözümü bulabilirsen, burada paylaşırsan sevinirim.

29, Mayıs, 29 Selim tarafından yorumlandı

Tekrar merhaba Yasin Bey

Sorunu çözdüm, sorunun kaynağı UserDefaults un uygulamam ile widget arasındaki senkronizasyonu değil ana uygulamamdaki UserDefaults'u atadığım verimin güncellenmesinin ana kod içerisinde yanlış yerde yapmammış. Veri atama kod bloğumu veri değişir değişmez yapacak şekilde güncelledim çalışıyor. Yardımlarınız için çok teşekkürler. İyi ki varsınız.

29, Mayıs, 29 yasin tarafından yorumlandı

Yardımcı olabiliyorsam ne mutlu. Kolay gelsin.

30, Mayıs, 30 Selim tarafından yorumlandı

Olmaz olurmusunuz çok teşekkürler, yeni bir konu açmak yerine burdan devam etmek istedim küçük bir sorunuma. Swift 4.1 kullanıyorum. Widgette eklediğim bir buton vasıtasıyla acaba ana uygulamamda ilgili sayfayı açtırabilir miyim, mümkünse nasıl yapabilirim?

30, Mayıs, 30 yasin tarafından yorumlandı

Öncelikle bir urlScheme tanımlayarak uygulamaya dışarıdan erişimi tanımlamalısın.

Daha sonra widget içerisinde bir buton aksiyonu veya ihtiyacına göre başka bir şekilde,
openURL fonksiyonunu kullanarak göndereceğin url'nin host gövdesinde özel bir parametre girebilirsin.

aşağıdaki adımları izleyerek yapabilirsin.

Adım - 1
enter image description here

Adım - 2
enter image description here

Adım - 3
enter image description here

Adım - 4
enter image description here

Adım - 5
enter image description here

Adım - 6
enter image description here

örnek proje dosyasına buradan ulaşabilirsin.

30, Mayıs, 30 Selim tarafından yorumlandı

Allah razı olsun, bizler için çok büyük bir değersiniz. Hem bu kadar bilgili hemde üşenmeyip uygulama yazıp anlatıyorsunuz. Hakkınızı helal edin büyük üstad.

30, Mayıs, 30 yasin tarafından yorumlandı

Helal olsun. Ne demek.
Hem benim için de iyi oluyor.
Eksikliklerim veya yanlış bildiklerim varsa görmüş oluyorum.

...