Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.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
健全性检查:设计同时在iOS和OSX中工作的视图的体系结构?_Ios_Objective C_Macos_Sanity Check - Fatal编程技术网

健全性检查:设计同时在iOS和OSX中工作的视图的体系结构?

健全性检查:设计同时在iOS和OSX中工作的视图的体系结构?,ios,objective-c,macos,sanity-check,Ios,Objective C,Macos,Sanity Check,我正在构建一个应用程序,我希望在iOS和OSX中重用99%的代码。只是要求做一次精神检查 (编辑)有关我的项目的更多信息,可能会影响一些响应:我的应用程序包含一个主要针对iOS设备的可定制演示文稿。OSX组件实际上是一个可定制演示文稿的设计器,这是一种指定在所选iOS设备上演示的内容的方法。也就是说,OSX应用程序将是一个完全正常的OSX应用程序,允许用户选择、配置和定位iOS设备的某些元素,并显示该演示文稿的预览。当然,我希望预览与iOS渲染尽可能相似(不需要实际调用iOS模拟器,我不希望所有

我正在构建一个应用程序,我希望在iOS和OSX中重用99%的代码。只是要求做一次精神检查

(编辑)有关我的项目的更多信息,可能会影响一些响应:我的应用程序包含一个主要针对iOS设备的可定制演示文稿。OSX组件实际上是一个可定制演示文稿的设计器,这是一种指定在所选iOS设备上演示的内容的方法。也就是说,OSX应用程序将是一个完全正常的OSX应用程序,允许用户选择、配置和定位iOS设备的某些元素,并显示该演示文稿的预览。当然,我希望预览与iOS渲染尽可能相似(不需要实际调用iOS模拟器,我不希望所有OSX设备都能使用iOS模拟器)。因此,我将演示设计为一个视图,在OSX和iOS上呈现的效果应该尽可能相同

为此,我从iOS开始使用一些简单的视图绘制工具,现在我正在重新配置代码,以便将其移植到OSX。到目前为止,我的策略是用_View/_Window/_Font/_Color等替换对UIView/UIWindow/UIFont/UIColor等的所有引用。对于iOS版本,我将包括一个名为Wrapper.h的文件,如下所示:

#define _Device UIDevice
#define _Application UIApplication
#define _ApplicationMain UIApplicationMain
#define _ApplicationDelegate UIApplicationDelegate
#define _Responder UIResponder
#define _Window UIWindow
…使用基于NS的OSX定义(NSWindows等),我知道一些细节会发生变化(如视图中的Y坐标),但我可以解决这一问题

我认为唯一不能像那样映射的组件是手势识别器,因为OSX没有等价物。我计划让它们成为一个通用调用,在iOS包装器中实现,并在OSX包装器中终止,因为我真的不需要OSX中的tap事件

好主意?坏主意?有没有更好的方法来解决这个问题?谢谢

到目前为止,我的策略是替换对UIView/UIWindow的所有引用/ UIFont/UIColor等,带有_View/_Window/_Font/_Color等

UIKit不仅仅是AppKit,所有出现的“NS”都改为“UI”。虽然有很多相似之处,但在框架的工作方式和用户期望使用每个框架编写的软件的方式上也有重要的差异。是否可以编写一个用UIKit和AppKit实现的框架?毫无疑问,但最终你会遇到阻碍你充分利用这两个平台的因素

好主意?坏主意?有没有更好的方法来解决这个问题

在我看来,这是个坏主意。如果您在设计数据模型方面做得很好,您应该能够在Mac和iOS实现之间共享数据模型,而无需进行任何更改。然后,与其花费大量时间试图找出如何编写一个单一的用户界面,并提出一些双方都能达成妥协的方案,不如将精力投入到创建在两个平台上都具有吸引力的独立用户界面上

到目前为止,我的策略是替换对UIView/UIWindow的所有引用/ UIFont/UIColor等,带有_View/_Window/_Font/_Color等

UIKit不仅仅是AppKit,所有出现的“NS”都改为“UI”。虽然有很多相似之处,但在框架的工作方式和用户期望使用每个框架编写的软件的方式上也有重要的差异。是否可以编写一个用UIKit和AppKit实现的框架?毫无疑问,但最终你会遇到阻碍你充分利用这两个平台的因素

好主意?坏主意?有没有更好的方法来解决这个问题


在我看来,这是个坏主意。如果您在设计数据模型方面做得很好,您应该能够在Mac和iOS实现之间共享数据模型,而无需进行任何更改。然后,与其花费大量时间试图找出如何编写一个单一的用户界面,并想出双方都能达成妥协的方案,不如将精力投入到创建在两个平台上都具有吸引力的单独用户界面上。

您真的试过了吗?我认为您99%的代码重用目标非常乐观。通常,桌面应用程序不仅仅是iOS应用程序的精确副本。这个问题也很难给出正确的答案。大多数代码都是独立于平台的逻辑,导致对NSBezierPath的一些非常基本的UIKit调用,等等。它只是在一个视图中绘制。我现在正在尝试,我遇到的唯一重大问题是一些UIWebBrowser控件。OSX有一个WebKit API和一个WebBrowser控件,其工作原理类似,但不完全相同。我只需要在my Helper函数中使用一个包装器来公开UIWebBrowser或WebBrowser,并相应地转换调用。好的,如果你使用web浏览器来帮助实现可移植性,并且你的应用程序没有使用太多UIKit,那么我会说去吧,然后回来问一些特定的问题,你会在哪里挂机。你需要更多的了解你正在实施什么。@DavidStein:我想你会发现这样做比你想象的要困难得多。只是一个警告你真的试过了吗?我认为您99%的代码重用目标非常乐观。通常,桌面应用程序不仅仅是iOS应用程序的精确副本。这个问题也很难给出正确的答案。大多数代码都是独立于平台的逻辑,导致对NSBezierPath的一些非常基本的UIKit调用,等等。它只是在一个视图中绘制。我现在正在尝试,我遇到的唯一重大问题是一些UIWebBrowser控件。OSX有一个WebKit API和一个WebBrowser控件,其工作原理类似,但不完全相同。将在my Helper函数中围绕它抛出一个包装器,以公开UIWebBrowser或WebBrowser,并相应地转换调用。好的,如果您使用web浏览器帮助实现可移植性和