- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
知道在 resume 窗口内存档 NSViewController
的最佳实践是什么吗? (用户界面保存)目的是什么?我尝试在窗口 Controller 的 encodeRestorableStateWithCoder:
方法中对其进行存档,结果发现调用 restoreStateWithCoder:
时 View Controller 不会取消存档。
// NSWindowController subclass
-(void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
[super encodeRestorableStateWithCoder:coder];
NSViewController* contentViewController = self.contentViewController;
if (contentViewController) {
[coder encodeObject:contentViewController forKey:BSContentViewControllerResumeKey];
}
}
-(void)restoreStateWithCoder:(NSCoder *)coder
{
[super restoreStateWithCoder:coder];
NSViewController* contentViewController = [coder decodeObjectForKey:BSContentViewControllerResumeKey];
if (contentViewController) {
// somehow this never get executed since contentViewController always comes out nil
self.contentViewController = contentViewController;
}
}
请注意,此 View Controller 包含管理自己的 subview 的其他 View Controller ,因此需要在 NSCoder
实例中进行一些范围界定 - 只需向下传递提供的 coder
对象将导致存档中的名称冲突。
提前致谢!
最佳答案
状态恢复在NSView
上免费工作,但在NSViewController
上被忽略,即使它作为NSResponder
的子类实现了方法。我想这是因为窗口不知道 NSViewControllers 可能拥有它包含的一些 View 。
在 OS X Yosemite 上它应该可以工作,因为 NSWindow
现在真正支持 NSViewControllers,但在我的测试用例中却没有。我猜这是因为人们需要使用新的 API 来“链接” NSViewController 来添加/删除它们,而不是在侧面创建它们,然后将它们的 View 直接添加到窗口中。如果您想让您的应用程序在 Yosemite 之前的系统上运行,后者实际上是必需的。
以下是让它始终正常工作的方法:只需代理 NSView
和 NSViewController
之间的恢复 API 调用即可。
子类NSView
如下:
@interface GIView : NSView
@property(nonatomic, weak) GIViewController* viewController; // Avoid retain-loops!
@end
@implementation GIView
- (void)setViewController:(GIViewController*)viewController {
_viewController = viewController;
}
- (void)encodeRestorableStateWithCoder:(NSCoder*)coder {
[super encodeRestorableStateWithCoder:coder];
[_viewController encodeRestorableStateWithCoder:coder];
}
- (void)restoreStateWithCoder:(NSCoder*)coder {
[super restoreStateWithCoder:coder];
[_viewController restoreStateWithCoder:coder];
}
@end
和 NSViewController
像这样:
@interface GIViewController : NSViewController
@end
@implementation GIViewController
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
self.view.viewController = self; // This loads the view immediately as a side-effect
}
return self;
}
- (void)dealloc {
self.view.viewController = nil; // In case someone is still retaining the view
}
- (void)invalidateRestorableState {
[self.view invalidateRestorableState];
}
@end
现在您可以从 NSViewController
子类调用 -invalidateRestorableState
,Cocoa 认为它正在与 NSView
通信,因此会自动调用 根据需要在您的
和 NSViewController
子类上 -encodeRestorableStateWithCoder:-restoreStateWithCoder:
。
关于cocoa - 为 Lion 的用户界面恢复功能编码 NSViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14844966/
去年我花了整整两天时间试图让 python-mysql 工作在我干净安装的 Lion 上,最后绝望地放弃了。升级到山狮后,我想我会再试一次,但没有成功。可能是我对 Lion 的所有尝试都搞砸了我的设置
我正在尝试让 WordPress 3.3.1 多站点(子域)在我的本地主机中工作。但是,我似乎需要为我的 Wordpress 虚拟主机配置通配符子域。我们的想法是让 any_subdomain.my_
我想在 osx lion 上安装 pyaudio,但我无法做到。每次我尝试使用 pkg 时,它都不会安装任何东西。当我尝试使用 pip 安装它时,出现以下错误(以及许多其他行): lipo: can'
我正在尝试让我在 Mountain Lion 上使用 Xcode 4.4 构建的 OS X 应用程序也能在 Lion 上运行。 将 OS X 部署目标设置为 10.7 没有帮助。该应用程序仍然无法在
我一直想用 Opa 弄脏我的手,但真的感觉缺少 REPL,这是我适应新语言的首选武器。瞧,Opa 博客提到了一个名为 opatop 的工具。看起来就是这样,但它似乎没有包含在标准的 Mac 或 Ubu
在 Lion 中打开窗口时,我遇到以下 EXC_BAD_INSTRUCTION 异常,但该应用在 Mountain Lion 中似乎工作正常。可能是什么问题? Process: MyA
我正在尝试在我的 mac 上使用本地服务器,但它似乎忽略了/etc/hosts 文件中的 localhost 设置。找到了几个页面,其中解决方案是重新安装,并将 localhost 放在/etc/ho
我最近升级到 Mountain Lion OSX,而我已经在工作的 MySql 停止工作了。当我尝试在终端中运行 MySql 时,我得到的是以下错误? ERROR 2002 (HY000): Ca
我有一个列表,当您将鼠标悬停在每个列表项上时,其中会显示一个按钮。该按钮位于每个列表项的右边缘。当列表不需要滚动时这很好用,但是当需要在带有隐藏滚动条的 Safari 中的 Lion/Mountain
我不太确定是什么原因造成的,但在 OSX 10.7.X 上当前稳定版的 safari 中,我只看到渲染了 3-4 帧。我下载了最新的 Safari 测试版,他们似乎改进了它,但它仍然掉落了大量的帧。
是否有任何工具可以分析 Mac OS X Lion 和 iOS 上的缓存未命中情况。如果您知道如何在乐器中做到这一点,请提供帮助。 Shark(CHUD 包)不安装在 Mac OS X Lion 及更
如果您创建一个普通项目并将其作为您的应用程序委托(delegate)的实现: @interface TESTAppDelegate () @property (nonatomic, strong) N
Network Link Conditioner 首选项面板(从 Apple 开发者网站上的“Hardware IO Tools for Xcode - Late July 2012”DMG 安装)在
我使用“ssh -X machine”连接到远程 Linux 计算机,然后运行图形应用程序,因此它的窗口使用 X Window 显示在我的本地 OS X Lion 计算机上。我收到错误 “Xlib:显
我从官方网站下载了 PostgreSQL 并运行了 .dmg 安装程序。之后我下载了 pgadmin3,我确实能够连接到数据库。 当我运行“psql”时,出现以下错误: psql: could not
我刚刚在我的雪豹安装上下载了 osx lion 更新。 Xcode 4.1 现在不会运行,因为它希望运行 Lion 版本。然而,当我去应用商店安装 Xcode 4.1 lion 时,它告诉我它已经安装
我能做到: sudo nano .bash_profile 但是当我这样做的时候: sudo echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bas
我正在制作一个使用山狮通知中心的应用程序。我包括对雪豹和狮子 growl 的支持。我该怎么做才能使二进制文件能够在两者上运行,而不需要 2 个单独的 .app 包。 最佳答案 我猜您会针对 Growl
我有一个使用 py2app 转换为捆绑应用程序的 python 脚本。手动调用时,它运行良好。但是,在 Mountain Lion 下,当我尝试使用 launchd 调用它时,系统日志中出现以下错误:
我正在迁移到一台新计算机,同时从雪豹迁移到狮子。 phpunit 似乎没有进行迁移,所以我重新安装了它。然而,pear 的标准安装似乎不适用于我的 php 家庭brew 安装。这是错误: phpuni
我是一名优秀的程序员,十分优秀!