标签: cocoa-bindings

KVC/KVO和绑定:为什么我只收到一个更改通知?

我看到了Cocoa的KVC/KVO和绑定的一些古怪行为.我有一个NSArrayController对象,它的'content'绑定到一个NSMutableArray,我有一个控制器注册为该arrangedObjects属性的观察者NSArrayController.通过此设置,我希望每次修改阵列时都会收到KVO通知.但是,似乎KVO通知仅发送一次; 第一次修改数组.

我在Xcode中设置了一个全新的"Cocoa Application"项目来说明问题.这是我的代码:

BindingTesterAppDelegate.h

#import <Cocoa/Cocoa.h>

@interface BindingTesterAppDelegate : NSObject <NSApplicationDelegate>
{
    NSWindow * window;
    NSArrayController * arrayController;
    NSMutableArray * mutableArray;
}
@property (assign) IBOutlet NSWindow * window;
@property (retain) NSArrayController * arrayController;
@property (retain) NSMutableArray * mutableArray;
- (void)changeArray:(id)sender;
@end
Run Code Online (Sandbox Code Playgroud)

BindingTesterAppDelegate.m

#import "BindingTesterAppDelegate.h"

@implementation BindingTesterAppDelegate

@synthesize window;
@synthesize arrayController;
@synthesize mutableArray;

- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
    NSLog(@"load");

    // create the array controller and the mutable array:
    [self setArrayController:[[[NSArrayController alloc] init] autorelease]]; …
Run Code Online (Sandbox Code Playgroud)

cocoa key-value-observing key-value-coding cocoa-bindings

2
推荐指数
2
解决办法
3756
查看次数

帮助进行关键值观察

我需要KVO的一些帮助,我差不多在那里.我想要做的是在树控制器中的某些内容发生变化时触发一个方法.

所以我使用这段代码注册为KVO.

[theObject addObserver: self
            forKeyPath: @"myKeyPath"
               options: NSKeyValueObservingOptionNew
               context: NULL];
Run Code Online (Sandbox Code Playgroud)

但是,当我观察的关键路径发生变化时,如何触发方法?

还有一个额外的问题,当我将自己添加为观察者时,我希望关键路径成为我的核心数据模型中的属性,我是否已正确完成?

cocoa core-data objective-c key-value-observing cocoa-bindings

2
推荐指数
2
解决办法
2253
查看次数

表视图不根据绑定更新 - 第二部分

这个问题借来的标题,其中一个重复.在那里看到我的答案,因为那个提问者出了什么问题; 我是那个答案的作者,而我的问题不是那个问题.

我有一个包含三列的表视图,其Value绑定绑定到arrangedObjects数组控制器的三个属性.数组控制器contentArray绑定到visitationResults我的文档对象; 该数组中的项是模型类(VisitationResult)的实例.我还绑定了数组控制器selectionIndexessortDescriptors我的文档的属性.

我通过几个访问者改变我的财产:

- (void) addVisitationResult:(VisitationResult *)newVisitationResult {
    [self insertObject:newVisitationResult inVisitationResultsAtIndex:[self countOfVisitationResults]];
    NSLog(@"arrayController arrangedObjects: %@", [arrayController arrangedObjects]);
}
Run Code Online (Sandbox Code Playgroud)

NSLog语句运行,并确认阵列控制器正在收集和排列我的模型对象.这意味着我正在通过我的财产并获取我的文件的KVO通知(这证明了先前的提问者的问题,绕过该属性的问题,不是我遇到的问题).

NSLog在模型对象类的访问器方法中添加了语句.其中一个是由数组控制器调用,以便对对象进行排序(该属性是排序键).阵列控制器不知道的其他两个从未被调用过.

因此,我的表格视图仍为空白.

macos cocoa nstableview nsarraycontroller cocoa-bindings

2
推荐指数
1
解决办法
1195
查看次数

如何将cocoa绑定编写为代码而不是Interface Builder?

在我的模型中,我得到了一个NSMutableArray跟踪元素数量变化的东西.在我看来,我得到了一个NSTextField显示元素数量.
视图从nib文件中取消归档并分配/进入模式.因此,它知道modell和包含的数组.

我建立了如下连接.在文本字段的Interface Builder中,我添加了一个Cocoa Binding "路径",如下所示:myModell.myArray.@count.通过这个我可以访问count属性(这是因为阵列本身必须改变).
绑定基于键值合规性,我在模型中建立了这一点,因此可以访问数组.但是,关键价值合规不是问题的一部分.

我的问题:如何将绑定放入源代码而不将其写入Interface Builder

cocoa interface-builder key-value-observing key-value-coding cocoa-bindings

2
推荐指数
1
解决办法
1602
查看次数

什么是资源密集型:绑定,KVO或通知

而不是试图运行一堆测试.有人知道资源密集程度较低吗?

绑定,KVO或通知?有人测试过吗?

resources cocoa cocoa-bindings

2
推荐指数
2
解决办法
548
查看次数

如何在填充与之关联的NSMutableArray(bind)时刷新NSTableVIew

我试图把我绑NSArraycontroller在一个NSMutableArray; 该数组包含"iData"类型的对象(它是一个自定义类).该类还包含一些NSMutableString变量,这些变量被设置为KVC的键.然后我将my绑定NSTableColumnNSArrayController并分别设置每列的关键模型路径.

当我尝试填充数组时,GUI不会显示任何内容.我忘记了什么?

objective-c nstableview nstablecolumn nsarraycontroller cocoa-bindings

2
推荐指数
1
解决办法
2017
查看次数

NSButton参数绑定在基于视图的NSTableView中

具有单列的基于视图的NSTableView.每个'单元'包含几个NSTextFields,一个NSImageView和一个NSButton,所有这些都绑定到Table Cell View的objectValue的各种属性.NSTableView的内容绑定到NSArrayController的arrangeObjects,NSArrayController处于Entity模式并绑定到相关的NSManagedObjectContext.

NSTextFields和NSImageView按预期运行.但是,出于某种原因,NSButton没有.它总是被禁用.我已将其参数绑定到objectValue的属性,并将其目标绑定到File的所有者.实验表明它是参数绑定而不是引起麻烦的目标绑定.印象是参数值必须为nil,因此导致按钮被禁用.然而它实际上不可能,因为其他绑定(NSTextFields等)工作正常.

我在基于单元格的表视图中多次使用了按钮参数/目标绑定而没有任何问题.所以我想也许基于视图的表视图有一些特征,这意味着这样的绑定不起作用.但Apple的TableViewPlayground示例使用这种方法(在HUD面板中)没有问题.我的绑定以完全相同的方式设置.我能看到的唯一区别是,Apple的示例使用了类模式阵列控制器,而我的是实体模式.但我无法相信这就是问题(或者至少我非常希望它不会是一个严重的弱点).

nstableview cocoa-bindings nsbutton

2
推荐指数
1
解决办法
1189
查看次数

Cocoa以编程方式绑定+不更新值?

我有一个自定义类(NSView实际上让我们说一个修改过的编辑器的子类,但不是它的子类NSTextView)我以NSArrayController编程方式绑定(我绝对不能通过Interface Builder来实现),如下所示:

[myEditor bind:@"string" 
     toObject:myController 
  withKeyPath:@"selection.content" 
      options:nil];
Run Code Online (Sandbox Code Playgroud)

上面的工作,但是当值改变时,它不会更新到我的NSArrayController- 它就好像它没有"坚持".

我甚至试过,使用options下面,但无济于事:

NSDictionary* options = [NSDictionary dictionaryWithObjectsAndKeys:
                         [NSNumber numberWithBool:YES],NSContinuouslyUpdatesValueBindingOption, 
                         [NSNumber numberWithBool:YES],NSAllowsEditingMultipleValuesSelectionBindingOption,
                         [NSNumber numberWithBool:YES],NSConditionallySetsEditableBindingOption,
                         [NSNumber numberWithBool:YES],NSRaisesForNotApplicableKeysBindingOption,
                         nil];
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

cocoa objective-c cocoa-bindings

2
推荐指数
1
解决办法
3486
查看次数

如何通过xib将NSMutableArray绑定到ArrayController

我是Cocoa的新手.我正在显示一个简单的Tableview,其中填充了NSMutableArray,它绑定到NSArrayController,如下所示

[_arrController bind:@"contentArray" toObject:self withKeyPath:@"dataArray" options:nil];
Run Code Online (Sandbox Code Playgroud)

这里_arrController是我的NSArrayController的IBoutlet,dataArray是带有数据的NSmutableArray.

当我以编程方式进行绑定时,我成功地填充了Tableview.但是我无法通过Interface Builder实现相同的绑定.

我选择了我的IB中的ArrayController,转到绑定部分,并通过选择模型键路径作为dataArray.But尝试在控制器部分下进行绑定.但是,我的表没有填充数据,其中以编程方式我可以轻松地完成我的任务.任何帮助表示赞赏.

cocoa objective-c cocoa-bindings

2
推荐指数
1
解决办法
4991
查看次数

在NSTextField上设置可编辑设置没有任何效果

NSTextField在一个视图中绑定到该视图的视图控制器中的值。当按下按钮时,我希望使文本字段不再可编辑,因此我使用以下代码:

- (IBAction)makeTextFieldNotEditable:(id)sender {
    self.textField.editable = NO;
}
Run Code Online (Sandbox Code Playgroud)

一切都正确绑定,当我按下按钮时,我可以确认上述方法被调用,但文本字段仍可编辑。我怎样才能解决这个问题?

macos cocoa nstextfield cocoa-bindings

2
推荐指数
1
解决办法
595
查看次数