在NSPersistentDocument Core Data Tutorial的“实施概述”部分中,它说:
- ...
- 在nib文件中创建新的顶级对象的一个问题是,当您使用绑定时,对象会保留绑定到的其他对象。这意味着必须打破绑定以确保文档关闭时没有保留周期。此外,由于新控制器拥有的nib文件包含顶级对象,并且控制器的类不从NSWindowController继承,因此需要在窗口关闭时释放顶级对象。
醇>
为什么不让控制器继承NSWindowController?有什么理由不行吗?或者这只是风格问题?
答案 0 :(得分:1)
如下所述,我确实让它与NSWindowController子类一起使用,它确实可以节省相当多的代码。
这是我的子类标题:
#import <Cocoa/Cocoa.h>
@interface NewAccountSheetController : NSWindowController {
@private
BOOL isValidForInsert;
NSManagedObjectContext * managedObjectContext;
NSObjectController * objectController;
NSObjectController * targetController;
}
@property (setter=setValidForInsert:) BOOL isValidForInsert;
@property (nonatomic, retain) IBOutlet NSManagedObjectContext * managedObjectContext;
@property (nonatomic, retain) IBOutlet NSObjectController * objectController;
@property (nonatomic, retain) IBOutlet NSObjectController * targetController;
- (void)beginSheetForWindow:(NSWindow *)window;
- (IBAction)endSheet:(id)sender;
@end
以下是Pastebin中的实现。
我不知道如何描述所需的绑定等等,但是如果你熟悉上面的教程,他们应该直截了当地推断......我想。 : - )
答案 1 :(得分:0)
在示例中,它讨论的是控制工作表而不是窗口。工作表在技术上是一个窗口组件而不是窗口本身,因此它不能使用NSWindowController子类作为控制器。窗口控制器不知道如何处理另一个窗口所拥有的窗口。
上面的文字只是提醒你,虽然表单控制器看起来非常像一个窗口控制器但它不是一个,你必须手动处理由窗口控制器自动处理的释放。