我有两个笔尖:
Product.nib的文件所有者是NSViewController
的子类,其属性product
绑定了各种控件:
@property(nonatomic, retain) SRProduct *product;
Store.nib有一个NSArrayController
对象,该对象已绑定到SRApplicationController
的属性,即此属性:
@property(nonatomic, retain) NSArray *products;
SRApplicationController
有NSArrayController
个对象的出口。
在-[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];
}
属性。任何人都可以帮我解决这个问题吗?提前致谢。 :)
答案 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绑定到另一个控制器的内容,以便能够以不同方式过滤和排序内容。