ULDocument 1.0.1

ULDocument 1.0.1

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

The Soulmen GbR维护。



  • The Soulmen GbR

此仓库包含 ULDocument,这是一个抽象文档类,设计成 NSDocument 和 UIDocument 的轻量级替代品。它用于我们的应用程序 UlyssesDaedalus 中。您可以根据MIT 许可证的条款在自己的应用程序中使用它。

ULDocument 的优点包括

  • 它是一个纯模型类,不依赖于视图或控制器层。

  • 它专为需要同时展示数十个文档实例的鞋盒应用程序而设计。

  • 它已准备好支持 iCloud。

  • 它在 OS X 和 iOS 上工作。

入门

该仓库作为 CocoaPod:ULDocument 提供。

或者,您可以克隆该存储库并在其中编译 ULDocument 作为库。您可以将此库链接到您的 OS X 或 iOS 项目中。您将在 Header 文件夹中找到所有必需的头文件。它还包含一个小的单元测试套件。

创建自己的 ULDocument 子类

ULDocument 是一个抽象类。要将其用于您自己的应用程序,您需要创建它的一个子类。头文件 ULDocument_Subclassing.h 包含所有对子类化有用的钩子或辅助方法。通常,实施以下抽象方法以读写您的文档就足够了

- (BOOL)readFromFileWrapper:(NSFileWrapper *)fileWrapper error:(NSError **)outError;

- (NSFileWrapper *)fileWrapperWithError:(NSError **)outError;

您实现 -readFromFileWrapper: 时,应将读取的内容存储到子类的一个属性中。例如,文本文档应有一个 text 属性,将在读取文档时设置。此属性通常是绑定到您的文档编辑视图的可变对象。您的文档子类必须观察此属性上的变化,并在变化被观察到时调用 -updateChangeDate。为了支持自动保存和撤销,任何文档编辑器都必须使用由您的文档实例提供的 undoManager

ULDocument 中已实现了所有 iCloud 需要的魔法:它会在外部发生更改时自动更新文档的内容,并正确地同步您的文件访问。因此,只需将您的文档存储在应用程序的 ubiquity container 中就足够了。

使用 ULDocument

您可以使用 -initWithFileURL:readOnly: 创建您文档子类的新实例。通常,您可以设置 readOnlyNO。但是,出于性能考虑,您应该考虑在足以满足需求时以只读模式打开文档。

在初始化文档实例之后,您可以使用 -openWithCompletionHandler: 异步打开并读取其内容。只需使用 -saveWithCompletionHandler: 保存任何更改。您还可以使用 -saveToURL:forSaveOperation:completionHandler: 将文档明确存储到新的URL上。

如果不再需要文档,您应使用 -closeWithCompletionHandler: 关闭它。任何未保存的更改将自动保存。

在 ULDocument 上使用 KVO

由于 ULDocument 涵盖了 OS X 和 iOS 的 NSFileCoordinator API,它可以在任意后台线程上操作任何属性。当您从视图观察 ULDocument 的属性时,您可能需要在主队列上调度观察处理程序。

通常,您应该异步处理所有观察以防止死锁:ULDocument 使用锁来大量同步文件和属性访问。