我对Swift中的异常处理有疑问.UIStoryboard类的UIKit文档指出,如果标识符为nil或故事板中不存在,则instantiateViewControllerWithIdentifier(identifier:String) - > UIViewController函数将引发异常.但是,如果我像下面这样使用do/try/catch,我会收到一条警告"在'try'表达式中没有调用抛出函数."
这只是一个警告,所以我认为这是一个智能问题; 但是当我运行以下代码并故意使用无效标识符时,不会捕获异常并生成SIGABRT.
let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
do {
let controller = try storyboard.instantiateViewControllerWithIdentifier("SearchPopup")
// This code is only included for completeness...
controller.modalPresentationStyle = .Popover
if let secPopoverPresentationController = controller.popoverPresentationController {
secPopoverPresentationController.sourceView = self.view
secPopoverPresentationController.permittedArrowDirections = .Any
secPopoverPresentationController.barButtonItem = self.bSearchButton
}
self.presentViewController(controller, animated: true, completion: nil)
// End code included for completeness.
}
catch {
NSLog( "Exception thrown instantiating view controller." );
return;
}
Run Code Online (Sandbox Code Playgroud)
你应该怎么做/ try/catch来抛出像这样的异常的函数?
提前致谢.
布赖恩
我在 macOS 上升级了 minikube,现在我无法启动它(在两台不同的机器上)。我一直在阅读一堆论坛,这似乎是一个常见问题,但没有一致的解决方案,也没有关于如何寻找根本原因的指导。
首次下载 VM 时出错,使用
./minikube start --vm-driver=vmwarefusion
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Downloading Minikube ISO
150.53 MB / 150.53 MB [============================================] 100.00% 0s
E0609 09:18:29.104704 891 start.go:159] Error starting host: Error creating host: Error executing step: Creating VM.
: exit status 1.
Run Code Online (Sandbox Code Playgroud)
然后当第二次运行“minikube start”时,它只是停留在“启动集群组件...”的年龄(和年龄),然后超时:
./minikube start
Starting local Kubernetes v1.10.0 cluster... Starting VM... Getting VM IP address...
Moving files into cluster...
Downloading kubeadm v1.10.0
Downloading kubelet v1.10.0
Finished Downloading kubeadm v1.10.0
Finished Downloading kubelet v1.10.0 …Run Code Online (Sandbox Code Playgroud) 我正在使用 Delve 进行调试,但在处理标准输入/标准输出的最佳方法方面遇到了问题。
第一个问题是我无法读取控制台。我有一个函数需要使用来自控制台的输入:
func readConsole() string {
reader := bufio.NewReader(os.Stdin)
entry, err := reader.ReadString('\n')
if err != nil {
tlog.Fatal(fmt.Errorf("readConsole(): Error reading console input. %v", err))
}
entry = strings.Replace(entry, "\n", "", -1)
return entry
}
Run Code Online (Sandbox Code Playgroud)
ReadString() 返回以下“错误文件描述符”错误:
F0208 21:03:56.574021 429026 configurator.go:81] readConsole(): Error reading console input. read /dev/stdin: bad file descriptor
Run Code Online (Sandbox Code Playgroud)
第二个问题是,当我刚刚运行应用程序时, fmt.Printf() 可以工作,但是如果我单步执行源代码, fmt.Printf() 不会显示任何内容。
我知道 dlv 正在通过控制台竞争输入和输出,但不确定如何管理竞争的要求。
我正在将脚本从 yq 3 迁移到 yq 4,但无法让一件事正常工作。
我有以下 YAML,并想在 targetNamespaces 之后添加一个列表项:
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: businessautomation-operator
namespace: rhpam-user1
spec:
targetNamespaces:
Run Code Online (Sandbox Code Playgroud)
所以输出应该是:
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: businessautomation-operator
namespace: rhpam-user1
spec:
targetNamespaces:
- rhpam-user1
Run Code Online (Sandbox Code Playgroud)
此命令用于更改名称空间:
yq eval '.metadata.namespace = "rhpam-user1"' -i ./file.yaml
Run Code Online (Sandbox Code Playgroud)
当我运行以下命令时,我收到错误:
yq eval '.spec.targetNamespaces[+] = "rhpam-user1"' -i ./file.yaml
Error: '' expects 2 args but there is 1
Run Code Online (Sandbox Code Playgroud)
我似乎无法正确理解新的 yq 命令结构......
我是Swift的新手,我想知道是否有人可以帮助确认我在Apple的Swift中发布对象的理解?
这里CGPathCreateWithRect()描述的文档说明返回值是
"一条新的,不可变的路径.你有责任释放这个对象."
什么时候说"你有责任"就像说当你不再持有引用时垃圾收集器将删除对象一样简单?即你负责管理参考资料?在哪种情况下 - 是不是很明显?如果不是 - 这是什么意思?
谢谢
拜伦