草庐IT

swift - 强制更新 Apple Watch 上的占位符复杂功能

coder 2023-09-13 原文

这是我在开始尝试 WatchKit 和复杂功能时遇到的一个简单问题。

我创建了一个简单的应用程序,它显示了一个带有公共(public)字符串“Y”的复杂功能,通过单击它,Apple Watch 应用程序显示了一个简单的开关。 我在 ComplicationController.swift 的 getPlaceholderTemplateForComplication 中编写了我的代码,并在 InterfaceController.swift 中添加了一个开关 IBAction

通过改变开关的值,公共(public)字符串在“N”和“Y”之间循环。我也想在并发症中改变它。然而,我注意到并发症保持在最初的“Y”状态。

我发现了一个关于强制更新复杂功能的类似问题,但它与 TimeLine 复杂功能相关,而不是 placeHolder。

func updateComplication() {
    let complicationServer = CLKComplicationServer.sharedInstance()
    for complication in complicationServer.activeComplications {
        complicationServer.reloadTimelineForComplication(complication)
    }        
}

我不清楚在我的案例中在哪里以及如何使用它。


按照建议,我处理了 getCurrentTimelineEntryForComplication 。

为了仅测试 ModularComplication,我使用了:

switch complication.family {
    case .ModularSmall:
        let modularSmallTemplate =
        CLKComplicationTemplateModularSmallRingText()
        modularSmallTemplate.textProvider =
            CLKSimpleTextProvider(text: stringa)
        modularSmallTemplate.fillFraction = 0.95
        modularSmallTemplate.ringStyle = CLKComplicationRingStyle.Closed
        let template = CLKComplicationTimelineEntry(
            date: NSDate(), complicationTemplate: modularSmallTemplate)
        handler(template)

    default:
        handler(nil)
    }

我在 InterfaceController.swift 中有开关 IBAction。

我在使用中遇到问题:

func updateComplication() {
    let complicationServer = CLKComplicationServer.sharedInstance()
    for complication in complicationServer.activeComplications {
        complicationServer.reloadTimelineForComplication(complication)
    }        
}

为了能够从 IBAction 内部调用它,我必须在哪里编写上面提到的函数?

如果我将它写在 ComplicationController.swift 中,通过从 InterfaceController.swift 中的 IBAction 调用它,如下所示:

ComplicationController.updateComplication() 

我收到错误“调用中参数 #1 缺少参数”,

如果我在 InterfaceController 中编写它并在 IBAction 中调用它,尽管构建成功,但在运行 App 并更改开关的值时,我收到以下错误:“ fatal error :在解包时意外发现 nil可选值”就行了:

for complication in complicationServer.activeComplications

func updateComplication。

最佳答案

这不是您要更新的占位符文本。占位符模板是一个静态模板,在您自定义表盘时显示在复杂功能的选择屏幕中。它只被调用一次来获取占位符文本,并且在重新加载时间线时不会被调用。

并发症的当前(实际的、实时的)时间线条目由 getCurrentTimelineEntryForComplication 提供。 .在此函数中,您应该使用模型的 on 开关状态来创建一个 CLKTextProvider,其中包含用于事件并发症系列的“N”或“Y”。

最后,您应该从您的开关 IBAction 调用 updateComplication() 来重新加载您的并发症时间线,这将更新当前条目以显示开关的新状态表盘。

由于您的复杂功能是手动更新的,因此您应该在 getNextRequestedUpdateDateWithHandler 中返回 nil updateDate,以避免为任何定期更新安排您的复杂功能。

已编辑问题的更新:

您应该在您的界面 Controller 中包含 updateComplication 函数,因为您并不打算实例化您的复杂功能 Controller 。

关于“在展开可选值时意外发现 nil”错误,这是 an issue that has been mentioned on the Apple Developer Forums .

如果您已经在运行 watchOS 2.1,您可以 try the latest watchOS beta看看这个问题是否已经为 2.2 解决了。你还应该 file a bug report和欺骗雷达 22947535。

关于swift - 强制更新 Apple Watch 上的占位符复杂功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35609201/

有关swift - 强制更新 Apple Watch 上的占位符复杂功能的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  3. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  4. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  5. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  6. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

  7. objective-c - 在设置 Cocoa Pods 和安装 Ruby 更新时出错 - 2

    我正在尝试为我的iOS应用程序设置cocoapods但是当我执行命令时:sudogemupdate--system我收到错误消息:当前已安装最新版本。中止。当我进入cocoapods的下一步时:sudogeminstallcocoapods我在MacOS10.8.5上遇到错误:ERROR:Errorinstallingcocoapods:cocoapods-trunkrequiresRubyversion>=2.0.0.我在MacOS10.9.4上尝试了同样的操作,但出现错误:ERROR:Couldnotfindavalidgem'cocoapods'(>=0),hereiswhy:U

  8. ruby-on-rails - Ruby - 如何从 ruby​​ 上的 .pfx 文件中提取公钥、rsa 私钥和 CA key - 2

    我有一个.pfx格式的证书,我需要使用ruby​​提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o

  9. ruby - 使用 AES 的 Rails 加密,过于复杂 - 2

    我在加密来self正在使用的第三方供应商的值时遇到问题。他们的指令如下:1)Converttheencryptionpasswordtoabytearray.2)Convertthevaluetobeencryptedtoabytearray.3)Theentirelengthofthearrayisinsertedasthefirstfourbytesontothefrontofthefirstblockoftheresultantbytearraybeforeencryption.4)EncryptthevalueusingAESwith:1.256-bitkeysize,2.25

  10. ruby-on-rails - Rails Associations 的更新方法是什么? - 2

    这太简单了,太荒谬了,我在任何地方都找不到关于它的任何信息,包括API文档和Rails源代码:我有一个:belongs_to关联,我开始理解当您没有关联时您在Controller中调用的正常模型方法与您有关联时调用的方法略有不同。例如,我的关联在创建Controller操作时运行良好:@user=current_user@building=Building.new(params[:building])respond_todo|format|if@user.buildings.create(params[:building])#etcetera但我找不到关于更新如何工作的文档:@user

随机推荐