Я слежу за множеством руководств в Интернете, чтобы узнать, как настроить усложнение. У меня нет проблем с настройкой усложнения, как и ожидалось.
До истечения срока действия первоначальных записей на временной шкале. Через 12 часов не знаю, как его обновить, чтобы усложнение сохранилось. Я поделюсь всем, что у меня есть ниже, и, надеюсь, кто-нибудь поможет мне в этом.
Здесь я создаю переменные для своих данных, которые хочу отобразить при усложнении.
struct data = {
var name: String
var startString: String
var startDate: NSDate
}
Следующий массив является контейнером для этих данных.
var dataArray = [data]
Это позволяет отображать усложнение, когда часы заблокированы.
func getPrivacyBehaviorForComplication(complication: CLKComplication, withHandler handler: (CLKComplicationPrivacyBehavior) -> Void) {
handler(.ShowOnLockScreen)
}
Это позволяет перемещаться во времени вперед по усложнению.
func getSupportedTimeTravelDirectionsForComplication(complication: CLKComplication, withHandler handler: (CLKComplicationTimeTravelDirections) -> Void) {
handler([.Forward])
}
Здесь я установил время начала временной шкалы равным «сейчас».
func getTimelineStartDateForComplication(complication: CLKComplication, withHandler handler: (NSDate?) -> Void) {
handler(NSDate())
}
Здесь я установил время окончания временной шкалы равным 12 часам от текущего момента.
func getTimelineEndDateForComplication(complication: CLKComplication, withHandler handler: (NSDate?) -> Void) {
handler(NSDate(timeIntervalSinceNow: (60 * 60 * 12)))
}
Здесь я создаю шаблон усложнения. Это сделано для того, чтобы показать образцы данных для пользователей, когда они видят мои затруднения, просматривая все сложности на своих часах.
func getPlaceholderTemplateForComplication(complication: CLKComplication, withHandler handler: (CLKComplicationTemplate?) -> Void) {
let headerTextProvider = CLKSimpleTextProvider(text: "Some Data")
let body1TextProvider = CLKSimpleTextProvider(text: "Some Data Time")
let template = CLKComplicationTemplateModularLargeStandardBody()
template.headerTextProvider = headerTextProvider
template.body1TextProvider = body1TextProvider
handler(template)
}
Это создает самую первую запись на временной шкале для усложнения. Как только усложнение будет включено, этот код будет запущен и немедленно заполнит усложнение соответствующим образом.
func getCurrentTimelineEntryForComplication(complication: CLKComplication, withHandler handler: (CLKComplicationTimelineEntry?) -> Void) {
createData()
if complication.family == .ModularLarge {
if dataArray.count != 0 {
let firstData = dataArray[0]
let headerTextProvider = CLKSimpleTextProvider(text: firstData.name)
let body1TextProvider = CLKSimpleTextProvider(text: firstData.startString)
let template = CLKComplicationTemplateModularLargeStandardBody()
template.headerTextProvider = headerTextProvider
template.body1TextProvider = body1TextProvider
let timelineEntry = CLKComplicationTimelineEntry(date: NSDate(), complicationTemplate: template)
handler(timelineEntry)
} else {
let headerTextProvider = CLKSimpleTextProvider(text: "No Data")
let body1TextProvider = CLKSimpleTextProvider(text: "Create some data")
let template = CLKComplicationTemplateModularLargeStandardBody()
template.headerTextProvider = headerTextProvider
template.body1TextProvider = body1TextProvider
let timelineEntry = CLKComplicationTimelineEntry(date: NSDate(), complicationTemplate: template)
handler(timelineEntry)
}
} else {
handler(nil)
}
}
Здесь я создаю записи на временной шкале для всех имеющихся у меня данных.
func getTimelineEntriesForComplication(complication: CLKComplication, afterDate date: NSDate, limit: Int, withHandler handler: ([CLKComplicationTimelineEntry]?) -> Void) {
createData()
var entries = [CLKComplicationTimelineEntry]()
for dataObject in dataArray {
if entries.count < limit && data.startDate.timeIntervalSinceDate(date) > 0 {
let headerTextProvider = CLKSimpleTextProvider(text: dataObject.name)
let body1TextProvider = CLKSimpleTextProvider(text: dataObject.startString)
let template = CLKComplicationTemplateModularLargeStandardBody()
template.headerTextProvider = headerTextProvider
template.body1TextProvider = body1TextProvider
let timelineEntry = CLKComplicationTimelineEntry(date: NSDate(timeInterval: (-10*60), sinceDate: data.startDate), complicationTemplate: template)
entries.append(timelineEntry)
}
}
handler(entries)
}
Это сообщает часам, когда обновлять данные о сложности.
func getNextRequestedUpdateDateWithHandler(handler: (NSDate?) -> Void) {
handler(NSDate(timeIntervalSinceNow: 60 * 60 * 6))
}
Здесь у меня проблемы.
Как мне создать новые данные и перезагрузить временную шкалу? Какой поток? Я не пытаюсь продлить сроки, а скорее полностью заменить их. Я в полной растерянности. документация Apple по этому поводу довольно расплывчата. Я знаю, что мне нужно реализовать следующие методы, но не знаю как. Может кто-нибудь помочь мне заполнить этот код?
func requestedUpdateDidBegin() {
createData() //I assume createData() goes here? If so, how do I populate the new timeline entries based on the results?
}
func requestedUpdateBudgetExhausted() {
//This can't possibly be the case as I haven't gotten it to work once.
}
func reloadTimelineForComplication(complication: CLKComplication!) {
//This method appears to do nothing.
}
Обновление:
Благодаря El Tea у меня все заработало. Мне нужно добавить экземпляр CLKComplicationServer в requestUpdateDidBegin и поместить внутрь метод reloadTimeline.
Вот обновленный код:
func requestedUpdateDidBegin() {
print("Complication update is starting")
createData()
let server=CLKComplicationServer.sharedInstance()
for comp in (server.activeComplications) {
server.reloadTimelineForComplication(comp)
print("Timeline has been reloaded!")
}
}
func requestedUpdateBudgetExhausted() {
print("Budget exhausted")
}
ComplicationController
, когда кажется, что вы не можете получить данные, которые вы установили вExtensionDelegate
черезWCSession:
, для извлечения? В основном в том коде, который есть в вашейcreateData()
функции, если он извлекается изExtensionDelegate
черезlet myDelegate = WKExtension.sharedExtension().delegate as! ExtensionDelegate
, но фактически не извлекает какие-либо из этих данных. Я застрял на этом здесь: stackoverflow.com/questions/35542729/ - person SRMR   schedule 22.02.2016