Как получить элементы от Swiftdata в Appintent для виджетаIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как получить элементы от Swiftdata в Appintent для виджета

Сообщение Anonymous »

Я пытаюсь получить элементы из моей базы данных SwiftData в конфигурации для моего виджета.

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

@Model
class CountdownEvent {
@Attribute(.unique) var id: UUID
var title: String
var date: Date
@Attribute(.externalStorage) var image: Data

init(id: UUID, title: String, date: Date, image: Data) {
self.id = id
self.title = title
self.date = date
self.image = image
}
}
< /code>
и, до сих пор, я попробовал следующее:

 appintent.swift
struct ConfigurationAppIntent: WidgetConfigurationIntent {
static var title: LocalizedStringResource { "Configuration" }
static var description: IntentDescription { "This is an example widget." }

// An example configurable parameter.
@Parameter(title: "Countdown")
var countdown: CountdownEntity?
}
countdowns.swift , это файл с представлением виджета

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

struct Provider: AppIntentTimelineProvider {
func placeholder(in context: Context) -> SimpleEntry {
SimpleEntry(date: Date(), configuration: ConfigurationAppIntent())
}

func snapshot(for configuration: ConfigurationAppIntent, in context: Context) async -> SimpleEntry {
SimpleEntry(date: Date(), configuration: configuration)
}

func timeline(for configuration: ConfigurationAppIntent, in context: Context) async -> Timeline {
var entries: [SimpleEntry] = []

// Generate a timeline consisting of five entries an hour apart, starting from the current date.
let currentDate = Date()
for hourOffset in 0 ..< 5 {
let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)!
let entry = SimpleEntry(date: entryDate, configuration: configuration)
entries.append(entry)
}

return Timeline(entries: entries, policy: .atEnd)
}

//    func relevances() async -> WidgetRelevances  {
//        // Generate a list containing the contexts this widget is relevant in.
//    }
}

struct SimpleEntry: TimelineEntry {
let date: Date
let configuration: ConfigurationAppIntent
}

struct CountdownsEntryView : View {
var entry: Provider.Entry

var body: some View {
VStack {
Text("Time:")
Text(entry.date, style: .time)

Text("Title:")
Text(entry.configuration.countdown?.title ?? "Default")
}
}
}

struct Countdowns: Widget {
let kind: String = "Countdowns"

var body: some WidgetConfiguration {
AppIntentConfiguration(kind: kind, intent: ConfigurationAppIntent.self, provider: Provider()) { entry in
CountdownsEntryView(entry: entry)
.containerBackground(.fill.tertiary, for: .widget)
}
}
}
coundthdownetity.swift , файл для претензий и структур Entityquery

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

struct CountdownEntity: AppEntity, Identifiable {
var id: UUID
var title: String
var date: Date
var image: Data

var displayRepresentation: DisplayRepresentation {
DisplayRepresentation(title: "\(title)")
}

static var defaultQuery = CountdownQuery()

static var typeDisplayRepresentation: TypeDisplayRepresentation = "Countdown"

init(id: UUID, title: String, date: Date, image: Data) {
self.id = id
self.title = title
self.date = date
self.image = image
}

init(id: UUID, title: String, date: Date) {
self.id = id
self.title = title
self.date = date
self.image = Data()
}

init(countdown: CountdownEvent) {
self.id = countdown.id
self.title = countdown.title
self.date = countdown.date
self.image = countdown.image
}
}

struct CountdownQuery: EntityQuery {
typealias Entity = CountdownEntity

static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Countdown Event")

static var defaultQuery = CountdownQuery()

@Environment(\.modelContext) private var modelContext   // Warning here: Stored property '_modelContext' of 'Sendable'-conforming struct 'CountdownQuery' has non-sendable type 'Environment'; this is an error in the Swift 6 language mode

func entities(for identifiers: [UUID]) async throws -> [CountdownEntity] {
let countdownEvents = getAllEvents(modelContext: modelContext)

return countdownEvents.map { event in
return CountdownEntity(id: event.id, title: event.title, date: event.date, image: event.image)
}
}

func suggestedEntities() async throws -> [CountdownEntity] {
// Return some suggested entities or an empty array
return []
}

}
countdownsmanager.swift , у этого просто есть функция, которая получает массив обратного отсчета
[CountdownEvent] {
let descriptor = FetchDescriptor()
do {
let allEvents = try modelContext.fetch(descriptor)
return allEvents
}
catch {
print("Error fetching events: \(error)")
return []
}
}
[/code]
Я установил его в своем телефоне, и когда я пытаюсь отредактировать виджет, он не показывает мне какого -либо из элементов, которые я создал в приложении, просто загрузка на пол секунды:



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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Виджет iOS не обновляется при выборе SwiftData AppIntent
    Anonymous » » в форуме IOS
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Открыть URL-адрес при нажатии кнопки AppIntent. Действие виджета?
    Anonymous » » в форуме IOS
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • SwiftData Custom Migration всегда терпит неудачу - возможна ошибка в SwiftData
    Гость » » в форуме IOS
    0 Ответы
    33 Просмотры
    Последнее сообщение Гость
  • SwiftData Custom Migration всегда терпит неудачу - возможна ошибка в SwiftData
    Anonymous » » в форуме IOS
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Получение из модели SwiftData для виджета DynamicAppIntent
    Anonymous » » в форуме IOS
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

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