与另一个笔尖中的NSArrayController的选择绑定

时间:2011-04-17 18:09:29

标签: objective-c cocoa model-view-controller cocoa-bindings

我有两个笔尖:

  1. Store.nib
  2. Product.nib
  3. Product.nib的文件所有者是NSViewController的子类,其属性product绑定了各种控件:

    @property(nonatomic, retain) SRProduct *product;
    

    enter image description here


    Store.nib有一个NSArrayController对象,该对象已绑定到SRApplicationController的属性,即此属性:

    @property(nonatomic, retain) NSArray *products;
    

    SRApplicationControllerNSArrayController个对象的出口。

    enter image description here


    -[SRApplicationController init]方法中,我使用Product.nib nib初始化SRProductController对象。在-[SRApplicationController awakeFromNib]中,我将产品控制器的视图添加到Store.nib中的视图,并将productsArrayController对象的SRApplicationController属性(出口)绑定到{{1}产品控制器:

    product

    当我运行应用程序时,我没有错误,没有警告,控制台仍然是空的,Store.nib中所有产品的表格视图显示所有产品,我可以选择它们。问题是Product.nib中的所有字段都是空的,但 绑定到文件所有者的- (id)init { if (self = [super init]) { self.productController = [[SRProductController alloc] initWithNibName:@"Product" bundle:nil]; } return self; } - (void)awakeFromNib { [self.productView removeAllSubviews]; // this method is from a category [self.productView addSubview:self.productController.view]; [self.productController.view setFrame:self.productView.bounds]; [self.productsArrayController bind:@"selectedObjects" toObject:self.productController withKeyPath:@"product" options:nil]; } 属性。任何人都可以帮我解决这个问题吗?提前致谢。 :)

2 个答案:

答案 0 :(得分:0)

某处有一些示例代码显示了如何执行此操作,我不记得是Apple代码还是来自其他地方。基本上你需要做的是在每个nib文件中都有一个数组控制器。列表样式nib中的数组控制器应该正常绑定,它的数组控制器应该是一个可访问的属性。在第二个nib文件中,您需要正常绑定数组控制器的内容。您还需要确保此详细信息nib的文件所有者与列表nib的文件所有者有连接。然后,将详细数组控制器的排序描述符绑定到listController.arrayController.sortDescriptors(实际上sortDescriptor实际上可能无法记住我的头脑。您还以相同的方式绑定选择索引。这将允许详细nib中的数组控制器跟上列表nib中发生的事情,之后您只需正常绑定每个detail元素(即产品名称文本字段将使其值绑定arrayController.selection.productName 。 如果您忘记将详细nib的数组控制器的排序描述符绑定到列表nib中的对应项,则每次选择在列表中更改时,详细信息nib都会更新,但它可能不会更改为正确的产品(绑定只是通过了selectionIndex不是选择了什么对象。)

答案 1 :(得分:0)

为Product.nib分配视图控制器时,应将其“product”属性绑定到阵列控制器的选择,它只能在代码中完成,但这样可以避免需要多个阵列控制器实例,并且避免将它们绑定在一起所以看起来一样。

另外,我建议不要将数组控制器的内容绑定到您自己的NSArray,如果您没有绑定该属性,阵列控制器将分配和管理自己的数组。您将能够直接从中添加/删除对象,而不必依赖您自己的属性来仔细通知NSArrayController发生了更改。

“content”绑定允许将数组控制器的arrangeObjects绑定到另一个控制器的内容,以便能够以不同方式过滤和排序内容。