在 Mac OS X 和 iOS 的 Core Data 中存储贝塞尔曲线路径

发布于 2024-10-27 09:30:19 字数 590 浏览 4 评论 0原文

我正在开发一个预装 CoreData 内容的 iOS 应用程序。

我正在尝试为 Mac OS X 命令行创建一个导入器应用程序,它使用相同的 xcdatamodel 并导入我可以随实际应用程序一起提供的初始数据。

到目前为止,一切都很好。

然而,模型中的一个字段是一个可转换字段,我想在其中存储贝塞尔曲线路径。不幸的是,Mac OS X 使用 NSBezierPath,而 iOS 使用 UIBezierPath 来存储贝塞尔曲线路径。

有没有办法在我的 OS X 项目中使用来自 iOS Simulator 平台的二进制 UIBezierPath 类(及其头文件)?
我不想将我的项目转换为在模拟器中运行,因为我希望能够从命令行运行它并传递参数。
应该有一种方法可以让这项工作发挥作用,不是吗?因为模拟器平台是针对Mac架构编译的,并且从未使用过GUI组件。

我也在寻找其他(创意?)方法来解决这个问题......也许是自定义 NSValueTransformer,或者 UIBezierPath 的 NSCoding 适应的逆向工程?
也许我的心胸太狭隘了,过于专注于最终会被证明是徒劳的尝试。如果您认为情况确实如此,请随时在您的回答中指出这一点......

I am developing an iOS application that comes pre-loaded with CoreData content.

I am trying to create an importer app for the Mac OS X command-line which uses the same xcdatamodel and imports the initial data that I can ship with the actual app.

So far, so good.

One of the fields in the model, however, is a transformable in which I want to store a Bezier path. Unfortunately, Mac OS X uses NSBezierPath while iOS uses UIBezierPath to store bezier paths.

Is there any way of using the binary UIBezierPath class (and its header file) from the iOS Simulator platform in my OS X project?
I don’t want to convert my project to run in the simulator because I want to be able to run it from the command-line and pass arguments.
There should be a way to make this work, shouldn’t there? Because the simulator platform is compiled for the Mac’s architecture and no GUI components are ever used.

I am also looking for other (creative?) ways to solve this problem… A custom NSValueTransformer, perhaps, or a reverse-engineering of UIBezierPath’s NSCoding adaptation?
Maybe I am just too narrow-minded, too focused on what will essentially turn out to be a futile attempt. Please feel free to point this out in your answer if you think it’s the case…

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

守不住的情 2024-11-03 09:30:19

CKBezierPath 模拟 iOS 的 NSBezierPath。未测试,但尝试一下。 ;-)

The library CKBezierPath emulates the NSBezierPath for iOS. Not tested, but give it a try. ;-)

笔落惊风雨 2024-11-03 09:30:19

Ken Ferry(Cocoa 框架团队的 Apple 工程师) :

密钥存档容器格式为
可以互换,但是无论是
特定档案是可以互换的
取决于里面有什么。显然如果
一个类仅存在于 iOS 之一上
和 Mac OS X,这是一个问题。为了
任意个别班级存在
在这两种操作系统上,很难说
任何事情都太具体了。人们可能会
利用新操作系统
放弃某些方面的兼容性。

如果您的密钥存档包含
专门的基础课程,它是
我们的意图是它们应该是
iOS 和 Mac 操作系统之间可互换
X 表示 Mac OS X 版本之间。 I
我认为我们没有具体的测试
但要确保它有效,所以,好吧,
如果没有效果,请提交
错误。

NSBezierPath 是 AppKit,所以你必须退回到逆向工程。这可能不会太困难,因为 UIBezierPathNSBezierPath 可能都依赖于 CGPath,但这只是猜测。

Ken Ferry (Apple engineer from the Cocoa frameworks team):

The keyed archive container format is
interchangeable, however whether a
particular archive is interchangeable
depends on what's in it. Obviously if
a class is only present on one of iOS
and Mac OS X, that's a problem. For
arbitrary individual classes present
on both OSes, it's difficult to say
anything too concretely. People may
have taken advantage of the new OS to
drop some aspects of compatibility.

If your keyed archive contains
exclusively Foundation classes, it's
our intent that they should be as
interchangeable between iOS and Mac OS
X as between versions of Mac OS X. I
don't think we have specific tests to
make sure it works, though, so, well,
if it doesn't for something, file a
bug.

NSBezierPath is AppKit though, so you have to fall back to reverse engeneering. It might not be too difficult because UIBezierPath and NSBezierPath probably both depend on CGPath, but that's only a guess.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文