在我的一个控制器中,我想在10.9上打开一个模态表。

这是第一个控制器的实现代码:

#import "ABSAdvancedPreferencesViewController.h"
#import "ABSUnsyncableWindowController.h"

@interface ABSAdvancedPreferencesViewController ()
@property (strong, nonatomic) ABSUnsyncableWindowController *unsyncableWindowController;
@end

@implementation ABSAdvancedPreferencesViewController

- (id)init {
  return [super initWithNibName:@"ABSAdvancedPreferencesViewController" bundle:nil];
}

- (IBAction)showUnsyncableSheet:(id)sender {
  if (self.unsyncableWindowController == nil) {
    self.unsyncableWindowController = [ABSUnsyncableWindowController new];
  }
  [self.view.window beginSheet:[self.unsyncableWindowController window] completionHandler:^(NSModalResponse returnCode) {
    CLS_LOG(@"Table dismissed");
  }];
}


当我执行链接的IBAction时,什么也没有发生。应该显示该模式的NSWindowController子类具有XIB,在启动时禁用了“可见”,并且window已经是出口。

调试时,我看到这里的window参数是nil,大概是因为我在上一个控制器中调用了new

@implementation ABSUnsyncableWindowController

- (id)initWithWindow:(NSWindow *)window {
  self = [super initWithWindow:window];
  if (self) {
    // Initialization code here.
  }
  return self;
}


还有其他我可以检查的信息以显示模态表吗?

最佳答案

您的ABSAdvancedPreferencesViewController init方法缺少将超级结果分配给self的方法。另外,为什么不按预期分配/初始化工作表控制器?

self.unsyncableWindowController = [[ABSUnsyncableWindowController alloc] initWithWindowNibName:@"XIBNAME"];


那应该分配窗口控制器,并且您应该能够访问其窗口进行显示。

关于objective-c - 在10.9上打开工作表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21512183/

10-10 21:16