自定义时复杂功能会冻结 Apple Watch
Posted
技术标签:
【中文标题】自定义时复杂功能会冻结 Apple Watch【英文标题】:Complication freezes Apple Watch when customizing 【发布时间】:2016-03-17 21:03:02 【问题描述】:我正在尝试为 watchOS2 创建复杂功能。我为我的 ios 应用程序创建了新目标 - 带有 Glances and Complications 我只想拥有一个模块化大型复杂功能。
当我尝试设置复杂功能时,手表冻结(在模拟器和真实手表上)
这是我的并发症代码:
-(void)getCurrentTimelineEntryForComplication:(CLKComplication *)complication withHandler:(void (^)(CLKComplicationTimelineEntry * _Nullable))handler
if (complication.family == CLKComplicationFamilyModularLarge)
CLKComplicationTemplateModularLargeColumns *template = [[CLKComplicationTemplateModularLargeColumns alloc] init];
NSString *title = NSLocalizedString(@"TODAYINTAKE", nil);
template.row1Column1TextProvider = [CLKSimpleTextProvider textProviderWithText:title];
template.row2Column2TextProvider = [CLKSimpleTextProvider textProviderWithFormat:@"kcal"];
template.row3Column2TextProvider = [CLKSimpleTextProvider textProviderWithFormat:@"ml"];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([self isDateToday:[defaults objectForKey:@"dateSaved"]])
template.row2Column1TextProvider = [CLKSimpleTextProvider textProviderWithFormat:@"%@",[defaults objectForKey:@"energy"]];
template.row3Column1TextProvider = [CLKSimpleTextProvider textProviderWithFormat:@"%@", [defaults objectForKey:@"water"]];
else
template.row2Column1TextProvider = [CLKSimpleTextProvider textProviderWithFormat:@"0"];
template.row3Column1TextProvider = [CLKSimpleTextProvider textProviderWithFormat:@"0"];
template.row2ImageProvider = [CLKImageProvider imageProviderWithOnePieceImage:[UIImage imageNamed:@"energy64"]];
template.row3ImageProvider = [CLKImageProvider imageProviderWithOnePieceImage:[UIImage imageNamed:@"water64"]];
template.row1ImageProvider = [CLKImageProvider imageProviderWithOnePieceImage:[UIImage imageNamed:@"64"]];
template.row1Column2TextProvider = [CLKSimpleTextProvider textProviderWithFormat:@" "];
CLKComplicationTimelineEntry *entry = [CLKComplicationTimelineEntry entryWithDate:[NSDate new] complicationTemplate:template];
handler(entry);
else handler(nil);
-(void)getPlaceholderTemplateForComplication:(CLKComplication *)complication withHandler:(void (^)(CLKComplicationTemplate * _Nullable))handler
if (complication.family == CLKComplicationFamilyModularLarge)
CLKComplicationTemplateModularLargeTable *template = [[CLKComplicationTemplateModularLargeTable alloc] init];
NSString *title = NSLocalizedString(@"TODAYINTAKE", nil);
template.headerTextProvider = [CLKSimpleTextProvider textProviderWithText:title];
template.row1Column2TextProvider = [CLKSimpleTextProvider textProviderWithFormat:@"kcal"];
template.row2Column2TextProvider = [CLKSimpleTextProvider textProviderWithFormat:@"ml"];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([self isDateToday:[defaults objectForKey:@"dateSaved"]])
template.row1Column1TextProvider = [CLKSimpleTextProvider textProviderWithFormat:@"%@",[defaults objectForKey:@"energy"]];
template.row2Column1TextProvider = [CLKSimpleTextProvider textProviderWithFormat:@"%@", [defaults objectForKey:@"water"]];
else
template.row1Column1TextProvider = [CLKSimpleTextProvider textProviderWithFormat:@"0"];
template.row2Column1TextProvider = [CLKSimpleTextProvider textProviderWithFormat:@"0"];
handler(template);
else handler(nil);
我通过CLKComplicationTimeTravelDirectionNone
作为支持的时间旅行方向
我很无助,因为我在控制台和模拟器中看不到任何错误,或者设备只是冻结了。
从 Carousel 崩溃报告中,我能够阅读到以下信息:
*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“需要应用程序。 bundleID:ql.ManaEU.watchkitapp appToReplace:代理:ql.ManaEU.watchkitapp 在数据库中找不到>' 以 NSException 类型的未捕获异常终止 中止()调用 CoreSimulator 191.4 - 设备:Apple Watch - 42 毫米 - 运行时:watchOS 2.0 (13S343) - 设备类型:Apple Watch - 42 毫米
【问题讨论】:
您是否检查了设备日志中的崩溃报告?如果 watchkit 扩展挂起,系统会终止它,但该类型的错误不会显示在控制台中。 请提供您的getPlaceholderTemplateForComplication
代码,因为这是ClockKit
依赖于自定义您的表盘复杂功能。
您好,我已经编辑了问题并提供了您想要的信息。
【参考方案1】:
仅供参考,我可以使用您提供的扩展代码自定义表盘。没问题。
如果您在崩溃日志错误中发现 bundle id,则系统报告 watchkit 应用程序(其中包含 watchkit 扩展)存在问题。
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“需要应用程序。 bundleID:ql.ManaEU.watchkitapp ...
您需要找出 watchkit 捆绑包出了什么问题。首先要从 Xcode watchkit 应用程序构建目标日志开始。如果那里没有错误或警告,请检查 iPhone 和 Apple Watch 控制台日志。
如果这没有指出问题所在,请检查Info.plist
以确保这些值有效,并且存在所需的键。还要检查 watchkit 应用目标构建设置。
您应该能够使用版本编辑器将 Xcode 项目与其初始提交进行比较,以查看是否有某些内容被无意更改或删除。
【讨论】:
【参考方案2】:您正在为CLKComplicationTemplateModularLargeColumns
的当前时间线条目 提供CLKComplicationTemplateModularLargeTable
的占位符模板。并发症占位符模板应与当前时间线条目匹配。
【讨论】:
以上是关于自定义时复杂功能会冻结 Apple Watch的主要内容,如果未能解决你的问题,请参考以下文章
为 Apple Watch 复杂功能设置 tintColor