当模态呈现或推送接口控制器时,我们可以指定context参数以将一些数据传递给新控制器,如下所示.
// Push
[self pushControllerWithName:@"MyController" context:[NSDictionary dictionaryWithObjectsAndKeys:someObject, @"someKey", ..., nil]];
// Modal
[self presentControllerWithName:@"MyController" context:[NSDictionary dictionaryWithObjectsAndKeys:someObject, @"someKey", ..., nil]];
Run Code Online (Sandbox Code Playgroud)
我的问题是,我们怎么能这样做呢?
假设我们以模态方式呈现一个控制器,以便用户从列表中选择一个项目,然后我们返回主控制器,我们如何获取已被选中的项目?
我正在尝试将数据从我的应用程序传递到Apple Watch应用程序中.基本上,我使用的方法与我用于创建今天小部件的方法相同,因此我通过NSUserDefaults传递数据.
问题是,当我运行我的应用程序时,数据不会像我预期的那样更新Watch应用程序中的标签.
这是我的......
override init(context: AnyObject?) {
// Initialize variables here.
super.init(context: context)
// Configure interface objects here.
NSLog("%@ init", self)
var defaults = NSUserDefaults(suiteName: "group.AffordIt")
var totalBudgetCalculation = ""
if (defaults!.stringForKey("totalBudgetWidget") != nil) {
println("Worked")
totalBudgetCalculation = defaults!.stringForKey("totalBudgetWidget")!
initialBudgetLabel.setText("Initial: \(totalBudgetCalculation)")
}
var currentBudgetCalculation = ""
if (defaults!.stringForKey("currentBudgetWidget") != nil) {
currentBudgetCalculation = defaults!.stringForKey("currentBudgetWidget")!
currentBudgetLabel.setText("Current: \(currentBudgetCalculation)")
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试将此代码放入其中willActivate(),但这似乎没有任何区别.
谁知道我哪里错了?
我对Apple Watch引入的新用户交互可能性感到非常兴奋,其中包括Force Touch和Digital Crown.
但是,我在WatchKit API中找不到它们.有没有办法接收Force Touch/Digital Crown的活动?是否可以为事件提供自定义处理程序?
我刚刚开始使用Apple Watch.我发现了" Five Minute Watchkit "中的说明,即让iOS应用程序和监视工具包应用程序都在模拟器中运行,并且两个进程都连接到LLDB调试器.
我所做的是启动并退出iOS应用程序以在SIM中安装当前版本.然后我切换到watchKit方案并启动它,它在手表模拟器上显示我的手表应用程序UI.
然后我在模拟器中启动相应的iOS应用程序,然后用户在Xcode菜单中"附加到进程",将调试器附加到正在运行的iOS应用程序.
这有效.我可以在监视工具包InterfaceController或我的iOS应用程序中设置断点,调试器会在应用程序中断.
但是,我没有在我的iOS应用程序的调试控制台中看到NSLog()语句.(我确实看到来自WatchKit扩展代码的日志语句.)如果我在我的iOS应用程序中设置断点,它确实会在该断点处停止.我假设缺少来自NSLog的控制台输出有关SOMETHING与附加到sim上的正在运行的进程而不是从Xcode启动它,但我不知道那是什么.
(顺便说一句,将动作附加到从断点调用NSLog的断点也不会显示,但是"日志消息"调试器命令会显示.有人有任何见解吗?)
编辑:iOS应用程序中的代码似乎并不重要.就我而言,这是一个简单的IBAction,它附加在iOS应用程序故事板中的按钮上:
- (IBAction)buttonAction:(UIButton *)sender;
{
NSLog(@"Button clicked on iPhone");
}
Run Code Online (Sandbox Code Playgroud)
我可以在NSLog语句上设置断点.调试器在该行停止,但我没有在调试控制台中看到日志语句.
Watchkit应用程序和扩展的版本和内部版本号(或版本和简短版本)必须设置为与包含应用程序相同的值.
我使用环境变量Info.plist在构建时动态设置应用程序版本.这也适用于Watchkit扩展,但不适用于Watchkit应用程序.
我使用的环境变量必须在主应用和扩展的plist中提供${}(对于${VERSION}我设置的变量VERSION).
如果我为Watchkit应用程序执行相同的操作,它将获取字符串本身,而不是值.如果我提供美元和括号,变量中没有数据.
知道如何设置Watchkit应用程序的变量吗?
很长一段时间以来,我一直在寻找这个问题的答案,所以我想我愿意冒一些downvotes来发布它.
基本上,我想让Apple提供的Apple Watch后台刷新示例代码实际工作(链接和代码如下).
我已经在模拟器和带有Apple Watch Series 2的iPhone 6s上尝试过,后台任务从未成功完成到时间更新的地步.我已经尝试将手表应用程序固定到扩展坞,我已经尝试将应用程序保留在前台并将其发送到后台,无论是在模拟器中还是在实际的手表上.我甚至尝试等待将近一年时间,看看Xcode或Apple Watch是否会收到更新,以确保其正常运行.
有没有人成功修改Apple提供的代码才能使其正常工作?
你可以在这里下载整个runnable示例项目: WatchBackgroundRefresh:使用WKRefreshBackgroundTask在后台更新WatchKit应用程序
/*
Copyright (C) 2016-2017 Apple Inc. All Rights Reserved.
See LICENSE.txt for this sample’s licensing information
Abstract:
The main interface controller.
*/
import WatchKit
import Foundation
class MainInterfaceController: WKInterfaceController, WKExtensionDelegate, URLSessionDownloadDelegate {
// MARK: Properties
let sampleDownloadURL = URL(string: "http://devstreaming.apple.com/videos/wwdc/2015/802mpzd3nzovlygpbg/802/802_designing_for_apple_watch.pdf?dl=1")!
@IBOutlet var timeDisplayLabel: WKInterfaceLabel!
private let dateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .long
return formatter
}()
// MARK: WKInterfaceController
override func …Run Code Online (Sandbox Code Playgroud) 使用Watch OS 2.0开发人员应该被允许访问心跳传感器....我很想玩它并为我的想法构建一个简单的原型,但我无法找到关于任何地方的信息或文档此功能.
谁能指出我如何处理这项任务?任何链接或信息将不胜感激
您好我正在尝试在GitHub中发布iOS(SWIFT)个人项目,但我害怕与所有人共享我的私有API密钥和秘密.
我正在使用解析,所以我在AppDelegate中有这样的东西:
let applicationId = "mySecretApplicationId"
let clientKey = "mySecretClientKey"
Parse.setApplicationId(applicationId!, clientKey: clientKey!)
Run Code Online (Sandbox Code Playgroud)
我想隐藏"mySecretApplicationId"和"mySecretClientKey",我的项目中是否有私有地方或目录,我可以放置这些变量?
谢谢!
对于iOS应用程序,UI更新是专门从主线程完成的 - 不会这样做从不推荐,并且可能导致意外行为.
在watchOS中,操作系统的结构是手表扩展和应用程序 - 作为不同的"容器".通常,从扩展程序调用UI更新,这些更新在应用程序的容器中更新.
相同的主线程逻辑是否适用于从watch扩展更新UI,还是可以从后台调用UI更新?
编辑 - 带来一些清晰度.从应用程序的容器中,UI更新可能应该发生在主线程上(如大多数系统/操作系统中所发生的那样,如下所述).问题是watchOS是否为我们处理,即是否在扩展的后台线程上调用UI更新将自动发布到应用程序容器的主线程中.
我有一个 iOS 应用程序,想在我的个人 iOS 设备上测试。我还佩戴了一块与这部 iPhone 正常连接的 Apple Watch。
我没有故意在我的 Xcode 项目中创建任何类型的 Apple Watch 目标或代码。我不想在 Apple Watch 上运行或测试该应用程序。我还没有在 Xcode 中将 Apple Watch 设置为某种开发目标......它只是连接到我的 iPhone。
尽管如此,Xcode 仍然不断尝试让我的 Apple Watch 与 iPhone 一起进行开发。它会延迟在 iPhone 上运行 iOS 应用程序,以便它可以从 Watch 上“准备”和“获取”各种内容。这些旋转器永远不会结束,因此我无法将 iOS 应用程序部署到 iPhone。
iPhone 正忙: iPhone 完成后,将继续通过 iPhone Xcode 准备 Apple Watch 进行开发。
iPhone 正忙:正在获取与 iPhone 配对的 Apple Watch 的调试符号
获取手表的调试符号
安装 watchOS 7.4 的符号
通过 iPhone 的 Apple Watch:无法准备设备进行开发。
如果设备上的操作系统版本与安装的 Xcode 版本不兼容,此操作可能会失败。您可能还需要重新启动 Mac 和设备才能正确检测兼容性。
如何才能完全隐藏此 Apple Watch 不被 Xcode 看到?禁用 Watch 上的任何类型的开发?将 …