UserDefaults возвращает значение null, но должно возвращать данныеIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 UserDefaults возвращает значение null, но должно возвращать данные

Сообщение Anonymous »

Код: Выделить всё

import WidgetKit
import SwiftUI

private let widgetGroupdId = "group.home_widget"

extension View {
func widgetBackground(_ backgroundView: some View) -> some View {
if #available(iOSApplicationExtension 17.0, *) {
return containerBackground(for: .widget) {
backgroundView
}
} else {
return background(backgroundView)
}
}
}

struct Provider: TimelineProvider {
func placeholder(in context: Context) -> SimpleEntry {
SimpleEntry(date: Date(), city: "PlaceHolder", temperature: "2°", weatherDescription: "Bulutlu", feelsLikeTemperature: "0°")
}

func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
let entry: SimpleEntry
if context.isPreview{
entry = placeholder(in: context)
}
else{

let userDefaults = UserDefaults(suiteName: widgetGroupdId)
let city = userDefaults?.string(forKey: "city") ?? "Tirana"
print("City from UserDefaults: \(city)")
if let city = userDefaults?.string(forKey: "city") {
print("City from UserDefaults in main app: \(city)")
} else {
print("City not found in UserDefaults")
}

entry = SimpleEntry(date: Date(), city: city, temperature: "2°", weatherDescription: "Bulutlu", feelsLikeTemperature: "0°")
}
completion(entry)
}

func getTimeline(in context: Context, completion: @escaping (Timeline) -> ()) {
getSnapshot(in: context) { (entry) in
let timeline = Timeline(entries: [entry], policy: .atEnd)
completion (timeline)
}
}

struct SimpleEntry: TimelineEntry {
let date: Date
let city: String
let temperature: String
let weatherDescription: String
let feelsLikeTemperature: String
}

struct home_widget_Previews: PreviewProvider {
static var previews: some View {
home_widgetEntryView(entry: SimpleEntry(date: Date(),city: "Example city", temperature: "2°", weatherDescription: "Buludlu", feelsLikeTemperature: "0°"))
.previewContext(WidgetPreviewContext(family: .systemSmall))

}
}
}
@main
struct home_widget: Widget {
let kind: String = "home_widget"
var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: Provider()) { entry in
home_widgetEntryView(entry: entry)
}
.configurationDisplayName ("My Widget")
.description("This is an example widget.")
.contentMarginsDisabled()

}
}

struct home_widgetEntryView : View {
var entry: Provider.Entry

var body: some View {
VStack(alignment: .leading) {
HStack {
Image("navigation")
.foregroundColor(Color.white)
Spacer().frame(width: 5)
Text(entry.city).foregroundColor(.white).font(Font.system(size: 18))
}

}
.widgetBackground( Image("cloud")
.resizable()
.aspectRatio(contentMode: .fill )

)
.contentMargins(0)
.padding(0)

}
}
Здесь, в UserDefaults, я не получаю город, однако в своем приложении Flutter я обновляю эту информацию. Я инициализирую домашний виджет на главной стрелке, а затем

Код: Выделить всё

HomeWidget.saveWidgetData(
'city',
city,
);
обновить мой город.
В андроиде все работает идеально. Я получаю данные. Но в iOS есть некоторая проблема. Я думаю, проблема в быстром коде. Заранее благодарю за помощь.

Подробнее здесь: https://stackoverflow.com/questions/787 ... eturn-data
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»