小编gre*_*ght的帖子

Swift的IBOutlets是零

(在OSX 10.9上开发,Xcode 6.1b)

如果我在AppController中声明IBOutlets,一切都很好.我在InterfaceBuilder中实例化一个对象,拖动它来形成一个插座,当我到达applicationDidFinishLaunching时,我的IBOutlets被填充,一切都很棒.

如果我更进一步抽象并在InterfaceBuilder(NSObject的子类)中实例化一个自定义控制器对象,并将我的一个对象声明为该类中的IBOutlet,那么它们就是零,每一个都是零.

我可以设置连接就好了,IB似乎确信它存在,'引用的出口'列表是正确的,但它不需要,我在文档之外找不到任何东西

它是隐式解包的,因为在从storyboard或xib文件初始化类之后,您可以假设插座已连接.

好吧,我假设.

我的所有代码都是样板Xcode产品:

@IBOutlet弱var sceneController:NSArrayController!

我已检查并仔细检查并三重检查连接.我看过几十个iOS教程(虽然我找不到OSX的等价物)所有这些似乎都是主题的变化'是的,你可以在AppController以外的文件中完全声明一个插座,只需确保每个涉及的实例都存在'.

(在撰写本文时,'mac'文档使用了以UIButton等为特色的示例)

我没有想法.很明显,连接没有形成,大概是因为对象是以"控制器类优先,IBOutlets以后"之外的顺序实例化的,但是我如何强制连接呢?

macos iboutlet swift

11
推荐指数
1
解决办法
5550
查看次数

NSDocument: AsyncOperation 我从未调用过

有时在使用我的基于文档的 mac 应用程序(Xcode 10、Swift 4.2、macOS 10.13.5)时,我在控制台中收到以下错误:

_NSDocumentBasicAsyncOperation 0x60c000233c40 isFinished=YES 没有被它所在的队列启动

我理解当您使用异步操作时会发生这种情况(参见,例如,this question),但我不知道。这是 Cocoa 自己完成的事情,所以我的问题是我应该有多担心,我怎样才能找出这个错误的来源?我覆盖了 NSDocumentController 和 NSDocument 中的一些函数;我怀疑它是 NSDocument 中的东西(我在每个打开的文档中都会得到其中一个),但是我很困惑从哪里开始进行故障排除,并且对可能发生的事情感到好奇。

nsdocument swift

7
推荐指数
0
解决办法
137
查看次数

使用 NSPersistentDocument 创建“文档”

我想创建一个使用

  • 迅速
  • 核心数据
  • 以标准 macOS 方式工作的“文档”[自定义扩展名,包含与该文档相关的所有数据的单个“文件”/文件包装器]

这似乎是不可能的。该文件非常清楚地说明

NSPersistentDocument 不支持某些文档行为:文件包装器。[..]

这让我认为在 CoreData 中处理图像的常用方法 -带有“允许外部存储”的二进制数据并将它们保存到不同的位置,将 URL 存储在数据库中 - 不能与 NSPersistentDocument 一起使用。我希望我的用户能够对我的“文件”执行通常的 Finder 操作(复制、移动到外部存储、从外部备份恢复)并且需要我的所有数据都在一个包中。

文件存储的 SQL 版本在保存时会产生通常的三重堆栈 - .sqlite、.sqlite-shm、.sqlite-wal - 作为“文档”是无用的。

有没有我忽略的解决方案?(示例非常稀少;Big Nerd Ranch 示例也没有解决这个问题;Marcus Zarra 和 Objc.io 都没有触及 NSPersistentDocument)。

macos core-data nspersistentdocument

5
推荐指数
1
解决办法
927
查看次数

Swift枚举和NSCoding

我有一个带有String属性和NSImage属性的'Thing'对象; Thing类有encodeWithCoder:和decodeWithCoder:方法,我可以使用NSKeyedArchiver/Unarchiver归档和解压缩[Thing]数组.

到现在为止还挺好.现在我想通过一系列方向扩展我的Thing类,其中'Direction'是以下枚举:

enum Direction{

case North(direction:String)
case East(direction:String)
case South(direction:String)
case West(direction:String)

}
Run Code Online (Sandbox Code Playgroud)

换句话说,我希望存储的数据是

thing1.directions: Direction = [.North("thing2"), .South("thing3")]
Run Code Online (Sandbox Code Playgroud)

(在一个更完美的世界中,我将使用对我的东西的直接引用而不仅仅是它们的名称,但我意识到这将很容易创建引用循环 - 在创建Thing之前无法设置对另一个Thing的引用 - 所以我会克制.我正在寻找一种快速而又脏的方法来保存我的应用数据并继续前进.)

由于我将需要其他地方的指示,这是一个单独的实体,而不仅仅是Thing类中的枚举.(不确定这是否有所不同.)

使我的Direction枚举符合NSCoding的最佳方法是什么?我能提出的最好的解决方法是创建一个[String:String]字典,其中"North"和"South"作为键,"thing2"和"thing3"作为值,并从中重构我的enum属性,但是有一个更好的方法?就此而言,是否有一种方法可以使元组符合NSCoding,因为现在(String,String)让我"不兼容协议"AnyObject"'错误.

非常感谢.

enums nscoding swift

4
推荐指数
1
解决办法
3543
查看次数