Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 强制调用委托方法_Cocoa_Delegates_Nsnotificationcenter_Nssplitview - Fatal编程技术网

Cocoa 强制调用委托方法

Cocoa 强制调用委托方法,cocoa,delegates,nsnotificationcenter,nssplitview,Cocoa,Delegates,Nsnotificationcenter,Nssplitview,我有一个NSSplitView的委托方法,如下所示: - (void)splitViewWillResizeSubviews:(NSNotification *)aNotification { NSLog(@"RESIZE!"); } 每当我拖动分隔符时,都会调用此方法,因此它已正确注册。我想从另一个对象调用它,并且正在考虑使用它: [[NSNotificationCenter defaultCenter] postNotificationName:NSSplitViewWillRes

我有一个
NSSplitView
的委托方法,如下所示:

- (void)splitViewWillResizeSubviews:(NSNotification *)aNotification
{
    NSLog(@"RESIZE!");
}
每当我拖动分隔符时,都会调用此方法,因此它已正确注册。我想从另一个对象调用它,并且正在考虑使用它:

[[NSNotificationCenter defaultCenter] postNotificationName:NSSplitViewWillResizeSubviewsNotification object:self];

根据Apple文档,这是调用委托方法时应该发送的通知。但是,它不起作用。有人知道我做错了什么吗?

您可以手动调用该方法

NSSplitView * yourSplitView; //Get reference to your splitview
id yourSplitViewDelegate = [yourSplitView delegate];
[yourSplitViewDelegate splitViewWillResizeSubviews:nil];//Optionally create the NSNotification with relevant data
如果您确实想通过通知中心,请确保问题中的
self
是NSSplitView

NSSplitView * yourSplitView; //Get reference to your splitview
[[NSNotificationCenter defaultCenter] postNotificationName:NSSplitViewWillResizeSubviewsNotification object:yourSplitView];

原来我需要为
NSSplitViewWillResizeSubviewsNotification
通知手动注册委托类

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(splitViewWillResizeSubviews:)
                                                 name:NSSplitViewWillResizeSubviewsNotification
                                               object:vc];
其中vc是应发送通知的viewcontroller


(对我来说)这是意外的行为,因为
预期会自动注册
NSSplitView…
通知。

是否要将
splitViewWillResizeSubviews
的实现公开给另一个类?或者您希望从另一个类中的NSSplitView获得额外的通知?我想从另一个对象手动通知代理,即用户不调整splitview部分的大小。我想从其中一个子视图的viewcontroller调用
splitViewWillResizeSubviews
。我没有从那里优雅地引用splitView本身(虽然我总是可以“手动”传递它。我想避免后者,但如果必要,我想直接调用该方法是可能的。关于第二个选项:为什么我问题中的
self
需要是splitView?
-(无效)postNotificationName:(NSString*)notificationName对象:(id)notificationSender
;我对通知没有任何经验,但发件人是否应该不是我发布通知的类?
notificationSender
是发送通知的类,而不是接收通知的类。NSNotificationCenter管理向哪些类发送通知。