这似乎应该很容易但我必须遗漏一些东西.我有一个基于文档的应用程序.我还构建了一个新的XIB,它有一个NSTableView和三个按钮,我打算显示以前的文件列表.我希望在应用程序首次启动时显示此XIB而不是文档窗口.一旦用户选择旧文件或点击"新建"按钮,我希望然后转到文档窗口.这是非常常见的,我经常看到使用过.
在我试图实现这一点的过程中,我修改了project-info.plist文件,并将主要NIB文件基本名称从MyDocument更改为我的选择XIB名称.这会导致应用程序显示"选择"窗口而不是"MyDocument"窗口.到目前为止似乎没有问题.
在我的选择窗口中,我已经为此XIB设置了我的表视图和一个数组控制器以及一个自定义窗口控制器.我已将文件所有者设置为新的窗口控制器,并将窗口控制器的窗口属性绑定到窗口,将Window的委托属性绑定到文件所有者以及"选择","取消"和"新建"按钮.NSApplication没有任何限制.但奇怪的是,当我运行这个应用程序时,似乎想要将这些控制器连接到NSApplication并出现错误(对于其他两个按钮也是如此):
无法将动作selectButton:连接到类NSApplication的目标
它还显示一个错误,即NSApplication不符合Key-Value标准,用于保存对我的数组的引用的插座.阵列控制器,窗口和按钮不绑定到NSApplication,而是绑定到新的Window Controller.我原本以为如果有任何问题就不会提到NSApplication而是提到控制器绑定的窗口控制器.
谁知道这里发生了什么?这是一个Target-Action问题,因为我将"主要NIB文件库名称"从"主菜单"更改为"选择"?如果我不应该改变这个,那么我怎样才能让Cocoa允许我在显示文档窗口之前显示选择屏幕?
任何帮助是极大的赞赏.抢
当前版本的 Xcode(版本 12.5.1)为 macOS 的基于文档的应用程序提供了一个模板,提供以下文档模型:
struct MyDocument: FileDocument {
    var text: String
    init(text: String = "Hello, world!") {
        self.text = text
    }
    static var readableContentTypes: [UTType] { [.exampleText] }
    init(configuration: ReadConfiguration) throws {
        guard let data = configuration.file.regularFileContents,
              let string = String(data: data, encoding: .utf8)
        else {
            throw CocoaError(.fileReadCorruptFile)
        }
        text = string
    }
    
    func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper {
        let data = text.data(using: .utf8)!
        return .init(regularFileWithContents: data)
    }
}
我想向此结构添加一个方法,将我的文档传递给外部程序,同时在执行此操作之前保存文档:
func passMyDocumentToProgram() {
    // Save document
    // Pass …有一个文件类型我的应用程序导入但不保存.我已经在文档类型中添加了一个条目并将其设置为只读,但这不会产生我正在寻找的导入行为.相反,我的应用程序将只打开文件,当我保存原始文件时,将以我自己的文件格式覆盖.
如何设置我的文档或文档类型,以便使用原始文档中的数据创建新文档,而不是打开原始文档?
我第一次将自己的脚浸入Cocoa.
这是一个简单的问题.OS X Lion支持在终止并重新启动应用程序时恢复窗口状态.好的,好的和好的.
但对于基于文档的应用程序,相同的 Resume功能是否也可以管理文档关闭时的窗口状态保存,以及稍后重新打开但是没有退出应用程序?(换句话说,无论应用程序是否退出,它是否可以持久管理每个文件的状态?或者我是否必须通过将信息保存在文档的文件中来自行管理?)
例如,iWork '09应用程序会执行此类操作:如果您关闭已保存的文档并重新打开它,它将恢复窗口大小,位置和滚动条位置.我不知道它是否使用Lion的Resume本身.
但是,相比之下,OS X Lion的TextEdit在退出并重新启动时会恢复窗口,但是当您关闭文档并重新打开它时,它不会记住窗口状态.这让我怀疑在没有退出的情况下使用Resume可能无法自动执行(因为Pages可能会以其专有文件格式保持窗口状态,但TextEdit不会,因为它使用纯文本,RTF,HTML等文件).
我还没有访问WWDC 2011视频,OS X发行说明,OS X应用程序编程指南和NSWindowRestoration API文档都没有具体谈到这一点.
所以问题再次出现:在关闭并重新打开文档窗口后自动记住文档窗口的状态而不退出应用程序(如iWork那样)...... Lion的Restore还支持这个吗?
非常感谢!
我有一个基于文档的核心数据应用程序,它按原样运行.我想添加对全局持久性存储的支持来保存项目库.
我已经阅读了大部分相关文档,并了解我应该在托管对象模型中使用配置.我已经定义了两个配置:"DocumentConfiguration"和"LibraryConfiguration".文档配置中的实体仅在文档配置中,库配置中的实体仅在库配置中 - 即,没有重叠.
然后,文档会说"然后在创建协调器时使用此模型".但是我实际上并没有创建自己的持久存储协调器,因为我使用的是默认的NSPersistentDocument协调器.
关于如何最好地进行并帮助消除我可能遇到的任何误解的几个问题:
A.我是否会在NSPersistentDocument中获取NSPersistentStoreCoordinator,然后按以下方式添加新的持久性存储:
NSPersistentStoreCoordinator * coordinator = [[myDocument managedObjectContext] persistentStoreCoordinator];
[coordinator addPersistentStoreWithType:NSXMLStoreType 
    configuration:@"LibraryConfiguration" 
    URL:url 
    options:nil 
    error:&error];
我认为这可能是一个问题,因为我没有在NSPersistentDocument的持久性存储协调器中提供其他配置定义("DocumentConfiguration"),因为我使用的是NSPersistentDocument提供的默认值.我猜它在保存文档的时候可能会使用nil.如果是这样,这会是一个问题吗?即,如果没有为所有持久性存储(在这种情况下为两个)定义相同的配置,协调器将如何知道哪个持久存储保存具有给定配置定义的实体?我能够在创建/保存之前设置NSPersistentDocument持久性存储的配置(到"DocumentConfiguration")吗?来自NSPersistentDocument文档:
保存新文档会添加具有所选URL的默认类型的存储,并在上下文中调用save:.对于现有文档,save只在上下文中调用save :.
B.创建我自己的NSPersistentStoreCoordinator和NSManagedObjectContext实例,添加定义了配置的两个持久存储,然后使NSPersistentDocument使用这些NSPersistentStoreCoordinator和NSManagedObjectContext实例并释放旧实例会更好吗?如果是这样,我如何为addPersistentStoreWithType:...方法指定NSPersistentDocument的url?只有在保存无标题文档后,才会知道此URL.(测试一下,在第一次保存文档之前,似乎没有任何临时持久性存储(通过持久性存储协调器上的方法persistentStores).
C.或者最好不要单独留下NSPersistentDocument,并创建我自己的NSPersistentStoreCoordinator实例,我专门用于持久库存储和托管库对象模型?文档说NSPersistentStoreCoordinator的多个实例应该在多线程Core Data应用程序中使用,但我不需要多线程Core Data支持.是否需要有两个NSPersistentStoreCoordinator实例 - 一个用于库,一个用于文档(直觉说这不是必需的,可能不是正确的方法)?
有什么建议?
我有一个基于文档的Cocoa应用程序,它使用辅助节点NSWindow进行预览模式(shouldCloseDocument设置为NO).
如果该文件是脏的(不保存修改),我关闭了二次NSWindow,一个"你想保存到文档所作的修改"提示出现.
如何在辅助设备上避免此提示NSWindow?
我有一个基于文档的应用程序.所以我需要一个我的应用程序的图标以及我的文档的图标.
在Xcode/Images.xcassets中有一个名为AppIcon的项目,我可以用它来设置应用程序的图标.

但是如何为我的文档制作图标?
以下是我在TARGETS/Document Types和TARGETS/Exported UTI下尝试过的内容

我尝试过在互联网上提出的不同方法,但没有任何作用 doc图标始终为空白且为空,如下所示:

我一直在研究一个新的基于文档的应用程序,并且非常高兴新的UIDocumentBrowserController ...试图为文档浏览器推出我自己的解决方案UI很棘手!
我在浏览器创建后打开文档时遇到了一些麻烦.
现在发生的是,当我选择在文档浏览器中创建新文档时,会按预期创建和打开文档,但会记录错误消息.但是,在关闭文档后,即使显示文档,也无法立即或在后续启动时重新打开文件.但是,一个奇怪的线索是,如果我在创建文档后停止运行应用程序,但没有向其添加新信息(触发保存周期),并再次运行项目,我可以正确打开文件.这让我觉得文件被保存的方式就是问题所在.(注意:在此阶段,我正在努力使本地,非/ icloud实现工作,然后我继续进行icloud实现.)
以下是文档保存到磁盘时代码中任何一点的错误消息(或至少大部分时间!):2017-06-20 13:21:58.254938-0500布道设计2 iOS [22454:5000138] [ default] [ERROR]无法获取项目文件的属性值:/// Users/stevenhovater/Library/Developer/CoreSimulator/Devices/9A4364F2-B3A1-4AD9-B680-FB4BC876C707/data/Containers/Data/Application/DD534ED8-C4A3 -40FE-9777-AED961976878 /文档/无标题-9.sermon.错误:错误域= NSFileProviderInternalErrorDomain代码= 1"不允许读者访问该URL." UserInfo = {NSLocalizedDescription =不允许读者访问该URL.}
我怀疑问题在于我的文档类型plists,我试图通过在wwdc 2017 session 229中模仿视频中的设置来设置.
 我的文档被一个NSData对象所包围,使用我所采用的UIDocument非常标准的子类实现.(我省略了生成缩略图的代码)
 
我的文档被一个NSData对象所包围,使用我所采用的UIDocument非常标准的子类实现.(我省略了生成缩略图的代码)
override func contents(forType typeName: String) throws -> Any {  
    print("Saving Document Changes")  
    if sermon != nil {  
        let newData = NSKeyedArchiver.archivedData(withRootObject: sermon!)  
        return newData  
    } else {   
        let newData = NSKeyedArchiver.archivedData(withRootObject: Sermon())  
        return newData       
    }  
}  
override func fileAttributesToWrite(to url: URL, for saveOperation: UIDocumentSaveOperation) throws -> [AnyHashable : Any] {  
    let thumbnail:UIImage = self.createThumbnail() …无论如何,在文件选择器屏幕出现之前,是否可以在启动基于 SwiftUI 文档的应用程序时显示入门屏幕?
我现在可以做的是在用户创建新文件或打开现有文件后显示入门屏幕,使用UserDefaults:
import SwiftUI
struct ContentView: View {
    @Binding var document: AnyDocument
    @State var onboarding: Bool
    
    var body: some View {
        if onboarding {
            OnBoarding(showOnboarding: $onboarding)
        } else {
            // Normal document view
            ...
        }
    }
}
有人可以告诉我如何使用Swift修复Xcode 6中的Apple模板以获取基于文档的应用程序.我尝试过使用和不使用核心数据(更喜欢),使用故事板而不是常规Xib.标准的,开箱即用的模板返回一个"[此处插入文档类型]类型不会映射到任何NSDocumentClass.当他们发布一个不起作用的模板的新语言时,这是非常令人沮丧的.
我想在Cocoa中构建一个基于文档的应用程序,但它可以创建和处理不同类型的文档.在一个应用程序中考虑Word,Excel,Powerpoint,只是简单得多.但是每个窗口都会根据文档的类型而有所不同.
对于存储,我将使用CoreData.我想添加一个指定文档类型的字段,因为它们应该都有相同的文件结尾.
因此,如果不创建几个独立的应用程序,最好的方法是什么?如何在Interface Builder中创建它?我该如何编写代码呢?
我不需要详细的源代码或任何东西,只是如何做到这一点的一般想法,我会想出其余的.
提前致谢!
我正在研究基于Cocoa文档的应用程序.我在文件菜单中有一个名为"Export Things ..."的菜单项.此菜单项连接到第一个响应者,并在MyDocument中调用选择器.到现在为止还挺好.
我想根据用户选择更改此菜单项的标题.如果用户没有选择任何内容,则应显示"导出所有内容...",当用户选择了某些内容时,应显示"导出所选内容...".当没有文档打开时,它应该只是"Export Things ...".
我应该在何时何地更改此菜单项?我想我可以使用setTitle改变菜单项:但是如何获得对NSMenuItem的引用?
document-based ×12
cocoa ×7
macos ×6
swift ×3
core-data ×2
swiftui ×2
cocoa-touch ×1
icons ×1
ios ×1
menuitem ×1
nswindow ×1
objective-c ×1
osx-lion ×1
restore ×1
uidocument ×1
xcode6 ×1
xib ×1