Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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
Objective c 不同OS X版本的不同NIB_Objective C_Xcode_Macos_Interface Builder - Fatal编程技术网

Objective c 不同OS X版本的不同NIB

Objective c 不同OS X版本的不同NIB,objective-c,xcode,macos,interface-builder,Objective C,Xcode,Macos,Interface Builder,对于不同的OSX版本,是否可能有不同的nib文件?因为例如10.6没有自动布局功能,而在10.7和10.8上它是一个很好的功能。因此,如果可能的话,我可以为10.6创建一个nib,为10.7和10.8创建另一个nib。是的,加载时只需提供不同的nib文件名即可。有一个地方你不能这样做,那就是应用程序NIB,但是它应该没有菜单栏旁边的UI元素,所以只需要保留Spring和struts(即不是autolayout) 这可能涉及覆盖NSDocument上的makeWindowController或wi

对于不同的OSX版本,是否可能有不同的nib文件?因为例如10.6没有自动布局功能,而在10.7和10.8上它是一个很好的功能。因此,如果可能的话,我可以为10.6创建一个nib,为10.7和10.8创建另一个nib。

是的,加载时只需提供不同的nib文件名即可。有一个地方你不能这样做,那就是应用程序NIB,但是它应该没有菜单栏旁边的UI元素,所以只需要保留Spring和struts(即不是autolayout)


这可能涉及覆盖
NSDocument
上的
makeWindowController
windowNibName
,例如,为了处理NIB文件名。有关为特定类解决此问题的更多信息,请参阅文档-这绝对是可行的。

当然。只需创建不同的NIB文件,例如,在这些文件名称的末尾添加版本,然后在运行时找出当前系统正在运行的OS X版本,并以编程方式为OS X版本加载正确的库

不过,对应用程序的“主”NIB执行此操作将相当困难(这是可能的,我以前没有这样做过,但我不推荐这样做)。只需使主NIB 10.6兼容,并且只将主菜单和应用程序委托(如果希望由NIB文件创建而不是通过编程方式创建)放入主菜单中即可。将所有窗口、视图和其他UI元素放入单独的NIB文件中,然后在应用程序委托中,以编程方式在回调中加载NIB文件,如
applicationdFinishLaunching:


只需查看并搜索“以编程方式加载Nib文件”。有一些有用的链接指向实现该功能所需的方法,以及一些简单常见情况下的示例代码。

因此,每个UI元素都应该在单独的nib中创建,如果是10.7 OS X,则在启动时加载为10.7创建的所有元素的nib,如果是10.6,加载为10.6创建的所有元素的NIB?为什么不建议在主nib中创建所有元素和所有内容呢?那么就只有两个NIB需要加载,这取决于OSX版本。听起来更简单,只是启动应用程序时的操作会更困难。@Julius:因为主Nib通常是自动加载的,而以编程方式加载主Nib要困难得多。每个UI元素也不需要一个Nib,您只能有三个Nib,Main,一个包含所有10.6元素,一个包含所有10.7+元素。在一个Nib中可以放置的窗口、视图和其他元素的数量没有限制。也没有必要把所有的东西都放在主笔尖上;只需将应用程序委托和主菜单放入主Nib,并将其他所有内容(包括主窗口)放入其他Nib文件就足够了。