Почему усложнение Apple Watch ничего не показывает?

Я создал приложение, используя шаблон Xcode «Приложение iOS с приложением Watchkit», зашел в 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)
}

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

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


person Robert    schedule 23.04.2019    source источник


Ответы (1)


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

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)
    }
}
person bkSwifty    schedule 23.04.2019
comment
Я реализовал getLocalizableSampleTemplate. Не имело никакого значения ни при прокрутке слотов, ни при выборе, поэтому я не упомянул об этом изначально. Теперь он добавлен к вопросу. Класс источника данных имеет значение $(PRODUCT_MODULE_NAME).ComplicationController, что является значением по умолчанию. Я работаю с текущими версиями Xcode (10.2.1), WatchOS (5.2) и iOS (12.2) в симуляторе и на реальном устройстве. - person Robert; 24.04.2019
comment
Ваш рабочий код функционально идентичен моему, за исключением того, что вы определяете var graphicCornerComplication вместо одной из функций в CLKComplicationDataSource. Я не вижу этого в документах... это что-то, что мне нужно определить? Куда его вызывают? - person Robert; 24.04.2019
comment
graphicCornerComplication — это просто свойство, которое я добавил в некоторые из своих моделей, чтобы я мог отображать соответствующую информацию как усложнение. Я обновил ответ, чтобы прояснить это. - person bkSwifty; 24.04.2019
comment
Если ваш код выглядит нормально, похоже, что происходит что-то еще. У вас есть действующая схема усложнения? - person bkSwifty; 24.04.2019
comment
Я думаю, что у меня есть активная схема. Извините за резкость, но я не совсем уверен, что это значит. Когда я редактирую схему по умолчанию, она показывает расширение Watchkit как одну из целей сборки. Есть ли что-то большее, чем это? - person Robert; 25.04.2019
comment
Усложнение, отображающее заголовок приложения и дефисы в нижних строках текста, возникает, когда шаблон отсутствует или имеет неправильный формат, например, когда изображения не могут отображаться. У меня был такой опыт, когда в соответствии с рекомендациями Apple я пытался использовать масштабируемые PDF-файлы вместо PNG. Переключился обратно на PNG, и все стало нормально. - person BlueskyMed; 17.05.2020