Почему мои осложнения Apple Watch ничего не показывают? - PullRequest
0 голосов
/ 23 апреля 2019

Я создал приложение, используя шаблон Xcode «iOS App with Watchkit App», зашел в TARGETS и проверил Complications Configuration > Supported Families > Graphic Corner.Я открыл ComplicationController.swift в Расширении и изменил getCurrentTimelineEntry():

func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {
    let cornerTemplate = CLKComplicationTemplateGraphicCornerStackText()
    cornerTemplate.outerTextProvider = CLKSimpleTextProvider(text: "Outer")
    cornerTemplate.innerTextProvider = CLKSimpleTextProvider(text: "Inner")
    let entry = CLKComplicationTimelineEntry(date: Date(), complicationTemplate: cornerTemplate)
    handler(entry)
}

Я также изменил getLocalizableSampleTemplate (), чтобы предоставить образец, и это тоже не работает:

func getLocalizableSampleTemplate(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTemplate?) -> Void) {
    let cornerTemplate = CLKComplicationTemplateGraphicCornerStackText()
    cornerTemplate.outerTextProvider = CLKSimpleTextProvider(text: "Outer")
    cornerTemplate.innerTextProvider = CLKSimpleTextProvider(text: "Inner")
    handler(cornerTemplate)
}

Когда я запускаю приложение в симуляторе или на своем телефоне / часах и выбираю усложнение в качестве одного из графических углов, я ожидаю увидеть «Внешний» и «Внутренний».Вместо этого он показывает имя моего приложения для одного и «---» для другого.

Что я делаю не так?

1 Ответ

1 голос
/ 23 апреля 2019

Это часть моего кода, который сейчас работает:

var graphicCornerComplication: CLKComplicationTimelineEntry? {

        guard #available(watchOSApplicationExtension 5.0, *) else {
            return nil
        }

        let innerTextProvider = CLKSimpleTextProvider(text: "Inner")
        let outerTextProvider = CLKSimpleTextProvider(text: "Outer")

        let template = CLKComplicationTemplateGraphicCornerStackText()
        template.outerTextProvider = outerTextProvider
        template.innerTextProvider = innerTextProvider

        let timelineEntry = CLKComplicationTimelineEntry(date: Date(), complicationTemplate: template)
        return timelineEntry

    }

Несколько соображений:

  • Вы внедрили свой код getLocalizableSampleTemplate? Это должно быть первым, что вы делаете при настройке осложнений. У вас должно быть что-то готовое для немедленного показа, когда пользователи просматривают слоты сложности и видят ваши. Если вы этого не сделаете, возможно, именно поэтому вы видите тире вместо намеченного текста.

  • Правильно ли назначен источник данных о вашем осложнении? В Targets > Your WatchKit Extension > Complications Configuration > Data Source Class убедитесь, что ComplicationController назначен.

  • Ваша запись может быть нулевой, если вы работаете над старой версией WatchOS.

РЕДАКТИРОВАТЬ - Чтобы уточнить, graphicCornerComplication - это просто свойство, которое я добавил в некоторые из моих моделей, чтобы я мог быстро получить запись временной шкалы, просто вызвав для них graphicCornerComplication. При использовании это выглядит примерно так:

func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {
    switch complication.family {
    case .graphicCorner:
        let graphicCornerComplication = dataModel.graphicCornerComplication
        handler(graphicCornerComplication)
    default:
        handler(nil)
    }
}
...