我有一个基于视图的NSTableView,它通过绑定填充.我的textFields和imageViews绑定到NSTableCellView的objectValue属性.
如果我想在我的NSTableCellView中有一个编辑/信息按钮:
谁应该成为按钮动作的目标?
目标如何获得与按钮所在的单元格关联的objectValue?
我最终想要显示一个基于objectValue的popover/sheet.
所有那些"NSOrderedSet后来被添加,因此不必与其他组件一起玩"错误让我发疯...
我有两个托管对象和它们之间有序的1:N关系,它由一个实例(或更精确的子类)支持NSOrderedSet.我想使用a来管理这种关系NSArrayController,以便从它提供的功能中获益(选择管理,内容绑定,视图绑定等NSTableView).
由于NSOrderedSet不是子类NSSet,contentSet绑定NSArrayController不适用于该关系.我发现了以下主题并试图实现那里提到的建议.
第一个建议是使用contentArray绑定和值转换器将有序集转换为数组.这个解决方案的问题是每次进行更改时重新分配内容,这不是我想要的.
在提到的线程中提供的第二个建议是使用contentArray绑定并将@array操作符应用于模型密钥路径.我已经尝试过,但是当通过添加/删除对象时根本没有触及底层关系NSArrayController.
我发现的另一个选项是使用带contentSet绑定的排序描述符.这将需要使关系无序,以便使contentSet绑定工作并引入特别用于管理订单的新属性.这还需要一个自定义排序机制来实现,它会搞砸模型.老实说,我想避免这个解决方案.
我的问题很清楚:有没有办法管理有序的核心数据关系NSArrayController?如果是这样,哪种方法尽可能少引起疼痛?
cocoa core-data nsarraycontroller cocoa-bindings nsorderedset
我想根据https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKit/#10_11CollectionView使用来自Swift的新API模型的NSCollectionView .由于我更喜欢在IB中尽可能多地做,我想使用内容绑定,并在链接页面上按照绑定内容部分到NSCollectionView(自WWDC种子以来新增).
我已经从对象库中将NSCollectionView拖入我的故事板,然后通过连接检查器删除了另外生成的原型 segue,并删除了生成的NSCollectionViewItem.然后,我将Collection View的布局设置为Flow,并将集合视图连接到视图控制器的插座.
接下来,我使用Xcode的视图模板创建了一个单独的.xib文件,并放入必要的视图.我还引入了"Collection View Item"对象.
然后,我调整了视图控制器的viewDidLoad方法,用集合视图注册nib.
override func viewDidLoad() {
super.viewDidLoad()
let nib = NSNib(nibNamed: "Item", bundle: nil)!
collectionView.registerNib(nib, forItemWithIdentifier: "")
}
Run Code Online (Sandbox Code Playgroud)
最后,我将我的数组控制器连接到NSCollectionView的Content绑定.
但是,当我尝试启动应用程序时,会抛出异常:
[NSNib _initWithNibNamed:bundle:options:]无法在bundle NSBundle中加载nibName:NSCollectionViewItem
仅当我的数组具有实际内容时才会发生异常,因此仅当需要实例化CollectionViewItem时.
我在这做错了什么?
我正在拼命尝试连接NSViews的控件,这些控件将驻留在使用outlet的NSCollectionView中.使用NSArrayController提供集合视图.
我在一个单独的NIB文件中创建了NSView,在NSCollectionViewItem的实现中,我覆盖了copyWithZone来加载它:
-(id)copyWithZone:(NSZone *)zone
{
id result = [super copyWithZone:zone];
[NSBundle loadNibNamed:@"InputView" owner:result];
return result;
}
Run Code Online (Sandbox Code Playgroud)
我根据这个说明使用了这种方法.
不幸的是,这是发生的事情:

NSView看起来像这样:

NSCollectionView驻留在NSScrollView中,滚动条设置为自动启用.但正如你所看到的那样,没有滚动条.
我真的不明白我需要做什么,所以NSCollectionView知道它的NSViews的尺寸.
它之前我没有单独的NIB文件,但后来我无法从视图到项目的出口连接:-(
cocoa objective-c interface-builder cocoa-bindings nscollectionview
在我的应用中,我做了一个非常简单的绑定.我有一个绑定到NSArrayController的NSMutableArray.控制器本身绑定到ComboBox,它显示NSMutableArray的所有内容.工作良好.
问题是:数组的内容会发生变化.如果用户对应用程序进行了一些调整,我会删除NSMuteableArray中的所有项目,并用新的和不同的项目填充它.
但是NSMutableArray < - > NSArrayController < - > NSComboBox的绑定不会刷新.
无论我是否从Array中删除所有对象,ComboBox仍然显示相同的项目.
这有什么不对?我的方法是错误的还是我只需要告诉绑定刷新自己?我没有发现如何做到这一点.
我刚刚开始搞乱绑定.我已经开始实现一个首选项对话框,将一些NSColorWell绑定到共享默认控制器.那是完美的.我的值被编码并正确保存.
但是,什么不起作用是取消对话框.如果我取消,则仍会保存这些值.
似乎我应该将取消按钮绑定到NSUserDefaultController的"恢复",但当然如果我这样做,我不能将它绑定到"performClose"(除非有一种方法将按钮绑定到多个动作,我我不知道.
我应该如何绑定取消按钮以恢复更改并关闭窗口.显然,我可以通过编写一个同时执行这两种操作的方法来实现,但似乎应该可以在IB中实现.
我试图在他的"核心数据"一书中关注Marcus Zarra.在书中,他制作了一个小样本应用程序,但是当事情无法解决时它没有给予太多帮助......
他首先通过可视化设计三个实体,然后将每个实体的阵列控制器添加到主笔尖.其次,他添加了一个tableview和一些其他可视组件来显示来自阵列控制器的数据.
到目前为止,我已经设法遵循,但现在他为gui添加了一个搜索字段,并将其绑定到与其中一个tableviews相同的数组控制器.在搜索字段中键入时,预期的行为将是tableview被过滤,但没有任何反应.
我如何找出问题所在?
笔尖的相关部分如下:
NSArrayController Recipes
- Mode = Entity
- Enitity Name = RecipeTableView w/TableColumn
- 值绑定到配方
- Controller Key = arrangeObjects - Model Key Path = name搜索字段
- 谓词绑定到配方
- 控制器键= filterPredicate
- 模型键路径=名称
- 显示名称=谓词
- 谓词格式= keyPath包含$ value
控制台中没有相关消息.
问候,
-Vegar
如果我有一个像这样的方法:
@interface CharacterSet
+ (NSArray *)allCharacterSets;
@end
Run Code Online (Sandbox Code Playgroud)
我可以使用Cocoa绑定绑定它吗?
我正在尝试将NSComboBox的内容值连接到它.当我进入CharacterSet.allCharacterSetsIB中的"模型密钥路径"字段时,它不起作用,说:
[addObserver:forKeyPath:@"CharacterSet.allCharacterSets"选项:0x0上下文:0x200275b80]被发送到与"CharacterSet"属性不符合KVC的对象.
我不知道还有什么可以尝试的.目前我必须allCharacterSets在我的自定义窗口控制器(或自定义窗口)中将返回值存储到ivar中以使其工作,这似乎是我不应该采取的额外步骤.
我花了一天多的时间试图找到一个如何使用NSObjectControllerfor binding和核心数据的简单示例.所有示例都NSArrayControllers带有NSTableView绑定.
您如何设置一个简单NSObjectController的核心数据来自动保存和获取数据?假设您想要将具有字符串属性的实体绑定到文本字段,您将如何执行此操作?
我NSManagedObjectContext有一套NSPrivateQueueConcurrencyType我在应用程序中大部分时间都在使用的设置.
除此之外,我创建了一个NSMainQueueConcurrencyType与可可绑定一起使用的子MOC (我听说绑定不适用于私有队列MOC).我已经绑定了一些ObjectControllers和一个ArrayController这个子环境.我非常希望将子进程保留在主队列中,而不是交换MOC队列类型.
当我通过UI更改绑定对象时,更改不会传播到父上下文.当我对父上下文进行更改时,它们不会过滤到Object/ArrayControllers.
我怎样才能做到这一点?是否有一个设置可以告诉Object/ArrayControllers适当地刷新它们的上下文并在它们进行更改时保存它?
cocoa core-data objective-c cocoa-bindings nsmanagedobjectcontext
cocoa-bindings ×10
cocoa ×8
core-data ×4
macos ×3
objective-c ×2
nib ×1
nsbutton ×1
nsorderedset ×1
nstableview ×1
xcode7 ×1