gpt4 book ai didi

macos - 无法在 Swift Storyboard 中设置绑定(bind)?

转载 作者:行者123 更新时间:2023-11-30 10:21:46 28 4
gpt4 key购买 nike

我有一些运行相当复杂算法的代码。我想构建一个相当简单的 UI,它允许我以某种图形方式监控算法中各种变量的值 - 将其视为某种仪表板。

因此,为了简单起见,假设我有一个如下所示的算法。它在值向量中搜索与目标值最接近的两个值:

import Foundation

class algorithm {

var numbers = [Double]()
let numberOfRandoms = 1000

dynamic var a: String
dynamic var b: String

init () {
// Load initial vector with some random numbers between 0 and 1
for _ in 1...numberOfRandoms {
numbers.append(Double(arc4random()) / Double(UINT32_MAX))
}

a = " "
b = " "

}

func findTheTwoNumbersThatAddUpTheClosestToTarget(target: Double) {

//Initializing this to a very large value
var currentBestSum = 1000.0

//Begin brute force search for the optimal solution
for i in 0...numbers.count-2 {
for j in i+1...numbers.count-1 {
//Check to see if the current candidate exceeds the best solution
if abs(numbers[i] + numbers[j] - target) < currentBestSum {
//If it does, store the new champion
a = String(i)
b = String(j)
//And reset the current top score to match
currentBestSum = abs(numbers[i] + numbers[j]-target)
}
}
}
}
}

现在,这只是一个简单(而且愚蠢)的示例,但它适合这些目的。我基本上想创建一个简单的 UI,在流程运行时(动态)显示重要值。

在此示例中,假设我只想显示两个标签,其中包含算法执行时两个领导者的索引值。

我在 Storyboard中创建了标签。

然后,我在 ViewController 中创建了 IBOutlet(实际上,当我按住 Ctrl 并拖动时, Storyboard为我完成了此操作):

class ViewController: NSViewController {

@IBOutlet weak var a: NSTextField!
@IBOutlet weak var b: NSTextField!

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
}

override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
}

然后,我按住 Ctrl 键将标签拖动到算法类中的 a 和 b 以创建绑定(bind)。

最后,我在 View Controller 中创建一个类变量,并在 viewDidLoad 方法中实例化它。这似乎不是正确的做法——也许确实如此。似乎您希望将界面和数据分开......

事实上,标签确实出现了——但它们从不显示 a 和 b 的任何值。它们只显示默认文本。

不知道我做错了什么。

帮忙!?

P.S.,针对 Anthony Kong,我确实认识到我可以手动同步代码中的所有 View 元素,但我认为使用绑定(bind)的全部目的是避免手动同步。我只是不知道如何设置它。

最佳答案

在不评论您的具体代码的情况下,我认为我已经经历过(并解决了)您描述的问题。我能够编写一个具有两个目标的应用程序,一个基于 NIB,一个基于 Storyboard。我尽可能地复制了每个中的代码,并共享了我试图在 TableView 中显示的公共(public)数据实例。基于 NIB 的应用程序使用我在 IB 中设置的库存 Cocoa Bindings 进行工作。但基于 Storyboard 的应用程序没有,数组 Controller 没有看到数据。

我的解决方案只是在 viewDidLoad 中以编程方式添加 contentArray 的绑定(bind)。为我解决这个问题的一行是:

ac.bind("contentArray", toObject: cd, withKeyPath: "people", options: nil)

ac 是 Storyboard 中 ArrayController 的 IBOutlet。 cd 是包含 people 数组的类实例。

这是使用 XCode 6.2 (6C107a),我认为这是 Beta 3。

这是我必须自己设置的唯一绑定(bind),TableView 到 ArrayController (arrangedObjects) 和 TableViewCell 到 TableView (objectValue) 不需要任何调整。

关于macos - 无法在 Swift Storyboard 中设置绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26079592/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com