bind:toObject:withKeyPath:options: 是单向绑定?
我有两个窗口:窗口a是从笔尖加载的;和窗口B是编程创建的. 两个窗口都有一个nstextView:窗口a中文本视图的属性串构成,使用ib 绑定了模型的属性text; window b中文本视图的属性string使用-[NSObject bind:toObject:withKeyPath:options:]方法绑定到模型的text属性. [textview bind:@"attributedString" toObject:obj withKeyPath:@"text" options:nil]; 这是一个奇怪的事情:窗口B中的文本视图确实绑定到obj.text,但是文本视图中的更改永远不会更新为obj.text.但是,如果我在窗口A的文本视图中进行了更改,则obj.text和窗口B中的文本视图将相应更新. 所以我在想,-[NSObject bind:toObject:withKeyPath:options:]方法仅用于单向绑定.我在可
10 2024-03-31
编程技术问答社区
如何确定苹果公司的方法是否是异步的?
我将nsarrayController绑定到具有mainqueueconcurrency的托管context. 我要做的就是修改带有我自己的功能的排列的属性,然后调用rearrangeObjects,然后选择一些对象. ,看起来像rearrangeObjects不会同步执行. 那么我该如何以一种或另一种方式证明? 这有效: [self.myArrayController rearrangeObjects]; // Async needed -- I believe rearrange calls a fetch, which is async dispatch_async(dispatch_get_main_queue(), ^{ [self.myArrayController setSelectedObjects:anArray]; }); 减去dispatch_async,它不起作用.选择不会发生. 我很确信,在NsarrayCont
8 2024-03-18
编程技术问答社区
NSTableView(或NSOutlineView)通过上下文菜单隐藏列:一个 "无代码 "解决方案
我搜索了这个问题的最佳解决方案,找到了几个线索,同时又不完全满足IMO.因此,我在我的无代码解决方案下发布. 目的是像Finder或其他本机应用程序一样,在表格或轮廓的标头栏上进行上下文菜单,以便选择哪些列是visibles. 解决方案 在IB故事板中,将所有需要的列添加到表视图中. 您可以默认设置其中的一些. Ctrl-Drag从IB文档轮廓视图到场景控制器代码视图的每一列,以自动为每列创建弱的IBOUTLET.目的是能够针对绑定中的给定列. __weak IBOutlet NSTableColumn *my_column; 在故事板场景中添加一个菜单,其项目数量与您计划隐藏的列相同.您不必给菜单项标题(请参阅下一点). 对于每个菜单项,在绑定窗格中,添加两个绑定: 通过您的控制器插座将项目title绑定到列title属性:controller_name.my_column.title.这样,菜单项将与列标题保持同步,如果代码需要更改. 这是关
12 2024-03-02
编程技术问答社区
NSPopupButton中带有绑定的分隔符项目
NSPopupButton的内容与字符串的NSArray绑定. 我们如何通过绑定插入分离器项目? " -"字符串(例如在旧/经典时代)不起作用,即从字面上显示为" -"菜单项. 是否有标准可可类和绑定的开箱即用解决方案? 这应该是一个琐碎的问题,但我找不到任何解决问题的解决方案,这些问题不涉及诸如sublassing NSMenu,NSMenu,NSPopupButton或其他非直觉工作的愚蠢hacks. 解决方案 我找不到一种干净的方法来在使用绑定时将分离器动态添加到菜单中.我发现的最简单(也是最可重复使用的)方法是使用nsmenudelegate在menuNeedsUpdate:委托方法中使用@"---"(例如@"---")的特定标题(例如@"---")动态交换NSmenuitems. . 步骤1: 创建一个符合NSmenudelegate协议 的nsobject #import @interface Sepa
8 2024-03-02
编程技术问答社区
Cocoa核心数据新手教程
我是渴望在Mac OS X开发方面尝试的.NET开发人员之一.目前,我试图找出可可的各种元素,并在核心数据上有点卡住. 我注意到网络上可用的大多数文档和资源都涉及广泛的端到端教程,从模型开始,生成类,基于文档的UI等.至少没有足够的例子. 有人可以将我指向正确的方向,无论是在线材料还是书籍,都可以为我提供各种位的详细说明吗?也许我陷入了.NET世界,但我仍然在数据访问层等方面思考.存储等.只是基础知识,而无需详细说明UI.如果我可以单位测试各种位,那也很好. 我想我试图在这里找到正确的心态 - 在那里做任何.net Dev知道适合像我们这样的人看可可编程的人吗? 非常感谢, 丹妮. 解决方案 首先,作为Apple的文档(以及Apple Engineers的反复评论),核心数据是一种"高级"可可技术. Grokking Core数据需要了解许多可可范式和模式.认真地,先学习可可.然后编写一个没有核心数据的项目(或几个).然后学习核心数据.认真. 为了使
10 2024-01-04
编程技术问答社区
Xcode 7: 将一个数组控制器绑定到一个单选按钮组上
我有一组少数对象,用户应该可以从中使用单选按钮组选择一个对象.对象已经绑定到数组控制器.有没有办法将该数组控制器绑定到单选按钮组,以便动态生成其他单选按钮?如果可能的话,首选IB解决方案. 示例项目: https://scriptreactor.com/collectionviewtest_radio.zip 目标是能够选择一个" A"," B"," C"的项目,并在视图控制器中可用. 解决方案 您可以在基于视图的表中通过objectValue(NSTableViewCell)绑定按钮状态,在集合视图(NSCollectionViewItem)中绑定representedObject. 如果将NSArrayController配置为为这些父视图生成单元格/项目,则视图将维护收集中每个视图的objectValue和representedObject绑定目标的状态. 因此,在IB中,您有一个带有广播按钮的通用子视图,并且您应该能够使用representedObje
4 2023-12-20
编程技术问答社区
Swift绑定无法使用Xcode 6 Beta 5
我正在使用Swift在OSX上使用Bindings进行简单的测试程序. 拥有NstableView,NsarrayController和Model类 在一起,但没有成功!构建编译,但立即给出了此错误: 线程1:exc_bad_access(代码= 1,地址= 0x0) 代码看起来像这样: 模型类: import Foundation class Name { var firstName = "Brook" var lastName = "Brooklyn" } 查看控制器: import Cocoa class ViewController: NSViewController { dynamic var names = [Name]() // serves as the content for Array-Controller override func viewDidLoad(
18 2023-12-20
编程技术问答社区
使用NSArrayController的分段式NSTableView
我正在尝试使用NSArrayController和可可绑定来创建截面NSTableView.我正在搜索类似的方法,例如iOS中的NSFetchedResultsController,您可以在其中设置截面密钥路径.我想用NSArrayController. 做类似的事情 我给你一个例子: 我有不同的任务.每个任务都有三个不同的优先级之一,低,中或高.这些任务还具有诸如标题,描述,日期等的属性.我想按优先级将任务进行分组或对任务进行分组(这里的"部分密钥路径"是优先级). 您可以用绑定和NSArrayController解决这个问题吗?我需要多个NSArrayController还是只有一个? 解决方案 虽然NSTableView可以渲染组行,但不幸的是,它取决于委托或数据源以使层次结构变平.它不了解替代数据源语义,例如UITableView's UITableViewStyleGrouped,NSArrayController也没有等效于NSFetchedResultsC
10 2023-12-18
编程技术问答社区
将NSArrayController绑定到Core Data文档的托管对象上下文的新方式是什么?
在Xcode进行并为OS X应用程序添加故事板之前,您可以通过将数组控制器的Managed Object Context与managedObjectContext的Model Key Path Model Key Path绑定到File's Owner>.有了故事板,没有更多的File's Owner那么您从现在开始从哪里获得上下文? Apple的文档位于该区域,没有明显的位置可以绑定到Xcode中.显然,我可以回到非故事的路线并使用旧方法,但是必须有一种新的方法. 解决方案 所以我得到了苹果的答案.这是针对基于文档的核心数据应用程序的,代码全都处于SWIFT中,但是Objective-C中的想法是相同的,您只需要翻译它. 他们给我的第一个答案是将数组控制器绑定到使用self.view.window.windowController.document.managedObjectContex模型密钥路径运行视图的视图控制器.我显示的样本使用了此方法,并且根本没有错误消息
18 2023-12-18
编程技术问答社区
使用Cocoa绑定将程序化的文本字段值变化传播给模型
我尝试了一个非常简单的实现: @implementation ScrollingTextField - (void)scrollWheel:(NSEvent *)event { self.doubleValue -= event.scrollingDeltaY; } @end i将滚动文本字段的value绑定到其他对象.滚动现在可以更新文本字段上的可见文本.但是,界值不会改变. 为什么绑定值不变? 或:如何使界值识别更改? 解决方案 绑定值不会更改 apple的设计.要在更改后自己传播对模型的价值,请调整此代码: NSDictionary *bindingInfo = [self infoForBinding:NSValueBinding]; [[bindingInfo valueForKey:NSObservedObjectKey] setValue:self.doubleValue
10 2023-10-19
编程技术问答社区
防止NSTableView保存新行,直到用户填入数值为止
我正在为我的应用程序的偏好窗口工作,用户可以使用NSTableView添加和删除预设.预设定义为: struct Preset: Codable { var name: String var value: Int } 这些预设应持续到UserDefaults.我的目标是编写尽可能少的代码,而写几乎应该是通用代码,因此我的项目使用NSUserDefaultsController,NSArrayController和可可绑定.在UserDefaults使用的属性列表中可用作为数组,字符串和整数类型可用,我决定使用这些设置,而不是使用这些设置而不是不透明的序列化数据类型. 另外,为了促进代码的其余部分访问这些预设的访问,我创建了一个设置singleton对象,该对象具有属性[Preset]的属性[Preset],该对象实现了计算的geters和seters从UserDefaults中检索. 我已经将MCVE上传到 github .它每秒记录presets属性的
26 2023-10-09
编程技术问答社区
改变Swift类中的绑定变量
我的标签具有与实例内部变量结合的标签. 当我更改变量时,我可以打印出新内容,但标签保留原始内容. class myClass: NSObject { var text : String = "Initial" override init() { text = "Init" } func change() { text = "Changed" } } @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { var instance = myClass() func applicationDidFinishLaunching(aNotification: NSNotification) { // Insert code here to initialize your applica
30 2023-10-09
编程技术问答社区
NSOutlineView和核心数据1 → 许多关系
我有一个支持1→许多关系的核心数据模型(对许多短语的1个文件夹).目前,我只是使用核心数据绑定到NSArrayController将所有内容粘合在一起,在平面NSTableView上显示短语 - 这很愉快. 我正在尝试尝试NSOutlineView以达到相同的结果,但也显示文件夹.我尝试了已经与NSTableView一起使用的类似绑定结构,但我没有取得任何进展.我应该采取哪些步骤从平坦的NSTableView移动到"深度"的NSOutlineView? 这是我妈妈: 顶级文件夹,底层短语.没有嵌套.我不是动物. nstreecontroller 我有一个NSTreeController绑定到Controller Content 的arrangedObjects的数组控制器 它设置为具有Folder的实体名称(这感觉错误) 的"实体名称"模式 phrases设置为儿童密钥路径 准备内容为真 它的MOC设置为有效的MOC nsoutlineview
24 2023-10-09
编程技术问答社区
Swift。Cocoa将值绑定到一个计算的属性上不工作
我正在学习KVC和绑定.目前,我正在尝试将Nstextfield绑定到计算属性colorWallStr.我已经将滑块的值绑定到相应的颜色变量,并将标签的值绑定到计算属性. 但是,当我移动幻灯片时,标签的内容不会改变. // Inside MainWindowController dynamic var colorRed: CGFloat = 1.0 dynamic var colorGreen: CGFloat = 1.0 dynamic var colorBlue: CGFloat = 0.0 dynamic var colorWallStr: String { get { return "R: \(colorRed) G: \(colorGreen) B: \(colorBlue)" } } 直接将标签粘合到颜色变量时,它的工作正常. 谢谢 @vadian的答案.现在,我可以使用属性的didSet更新标签来触发更新标签方法(请参
18 2023-10-09
编程技术问答社区
我如何将我的阵列控制器与我的核心数据模型绑定?
我是Swift编程的新手,并且正在尝试执行一个简单的应用程序来学习使用核心数据并将其绑定到应用程序中.我研究了很多例子,但似乎都老了.我在Xcode 9中工作. 我从带有核心数据的MacOS可可应用程序开始.我有一个简单的实体,称为"锻炼",具有4个属性日期,秒,运动和RPE. 然后, i然后在视图控制器场景下添加了一个数组控制器.我添加了一个表视图,将数组控制器设置为数据源.我添加了按钮以添加并删除链接到数组控制器添加和删除方法. 我认为我现在要做的就是将数组控制器绑定到我的核心数据模型的托管context.这是在AppDelegate中找到的.但是,当我选择数组控制器并转到绑定并选择参数时,唯一要绑定到的选项是"查看控制器"和"共享用户默认控制器".我已经选择了视图控制器,但无法弄清链接到我的数据模型的模型密钥路径. 我觉得我一定会错过一些明显的东西.我觉得必须有一种方法可以绑定到AppDelegate,也必须从视图控制器绑定模型密钥路径,但我也无法弄清楚.任何
32 2023-10-08
编程技术问答社区
Cocoa与NSToolbarItem的连接绑定是否能防止去初始化?
尝试通过连接绑定到属性(选项发送)来设置NSToolbarItem的选定段.将窗口控制器分类为 class MyWindow: NSWindowController { dynamic var optionSegment: Int = 0 override func windowDidLoad() { super.windowDidLoad() } } 或者,将选项段属性放在NSDocument子类中并与之绑定.每个工作.问题在于,使用这种绑定或似乎与NSToolbarItem绑定的任何绑定,我的对象(视图,视图控制器,文档等)都不会降低.具有约束力,他们没有.卸下绑定,然后进行. 有什么想法为什么会这样?建议?很困难. 谢谢! 解决方案 正如Willeke所建议的,工具栏.视图是成功的途径.必须说,对象的层次结构对我来说并不总是很清楚,但是.视图似乎是唯一的可能性,因为我一夜之间查看了工具键挂钩,而威勒克的建议证实
8 2023-10-08
编程技术问答社区
将Swift中的属性与NSTextFields绑定
我正在研究用Swift编写的单元转换器,该单元将自动显示适当的NSTextField s中的更新单元.在此示例中,如果用户输入minutesField>的几分钟,则应自动更新secondsField和hoursField以显示属性转换的值.以下是我视图控制器中代码的示例: import Cocoa class ViewController: NSViewController { @IBOutlet weak var secondsField: NSTextField! @IBOutlet weak var minutesField: NSTextField! @IBOutlet weak var hoursField: NSTextField! var sec: Double = 1 var min: Double = 1 var hr: Double = 1 let conv = [[1, 0.0166666
10 2023-10-07
编程技术问答社区
在Swift中把一个NSTableView绑定到一个字符串数组上
我正在通过通过阵列控制器绑定而显示具有NstableView的一系列字符串的内容. 我在属性控制器的属性检查器中具有" nsstring",并且在数组控制器的绑定检查器的模型密钥路径中,我有通往我数组的路径.而且,我的值部分绑定到其值部分中的唯一的列与数组控制器未指定的模型密钥路径(这只是字符串数组). 结果,阵列的字符串在表格中很好地显示.但是我无法编辑任何行: 2015-06-17 15:48:44.285 ProjectName[9043:123132] An uncaught exception was raised 2015-06-17 15:48:44.285 ProjectName[9043:123132] Error setting value for key path of object five (from bound object identifier: (null)): [
18 2023-10-07
编程技术问答社区
在Swift中使用绑定程序化地创建基于视图的NSTableView
我正在通过Swift Book中的可可(Cocoa)进行工作,并且被困在有关绑定的一章中.这本书使用笔尖文件,但我想以编程方式执行所有操作(因为我加入了一个不使用NIBS的团队).该项目将创建一个带有2列的基于视图的表,并且表格的内容与数组控制器的 bengeDobjects 绑定.数组控制器的内容绑定到员工对象的数组(员工有2个属性,即姓名和工资). 我能够以编程方式创建表(一个滚动视图,一个表视图,2个表列): let tableWidth = windowWidth! * 0.6 let tableHeight = windowHeight! * 0.8 scrollView = NSScrollView(frame: NSRect(x: windowWidth!*0.05, y: windowHeight!*0.08, width: tableWidth, height: tableHeight)) employeeTable = NSTableView(fram
26 2023-10-07
编程技术问答社区
是否有办法在Swift中以编程方式设置NSCollectionView?
我来自iOS开发,我想知道是否有一种方法可以在iOS中像UICollectionView一样以编程方式设置NSCollectionView?并在代码中添加NSCollectionViewItems.还是设置使用绑定的唯一方法? 谢谢! 解决方案 感谢@stevesliva向我指出所以答案.我将其转换为Swift. 这就是我得到的. 我正在在ViewController中创建NscollectionView: import Cocoa class ViewController: NSViewController { var titles = [String]() var collectionView: NSCollectionView? override func viewDidLoad() { super.viewDidLoad() self.titles = ["Banana", "Apple", "Strawberry", "Cher
34 2023-10-07
编程技术问答社区