标签: nsdocument

在NSPersistentDocument上启用核心数据的自动轻量级迁移

ALM很棒.但我不能让它在使用Core Data with NSDocument的项目上工作.似乎默认情况下禁用ALM.

精细.对于任何正常项目,您可以在此行中为字典添加两个适当的选项:

if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error])
Run Code Online (Sandbox Code Playgroud)

...但是当使用带有NSD的CD时,该行不存在(NSPersistentDocument隐藏了详细信息,我看不到如何修改它们).

以下方法似乎提供了希望:

configurePersistentStoreCoordinatorForURL:ofType:modelConfiguration:storeOptions:error:
Run Code Online (Sandbox Code Playgroud)

...邮件列表上的一些人(从4年前开始)报告成功覆盖该方法,更改选项字典,然后在"超级"上重新调用它.遗憾的是,那对我不起作用.如果你有类似的问题,我建议先尝试一下 - 如果它仍然不起作用,那么回到这里:)

macos core-data nsdocument

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

applicationShouldOpenUntitledFile返回NO,但app仍会打开空白文档

我不清楚如何阻止基于文档的应用程序在启动时显示空文档.

在我发布的上一个问题中,有人说:"你确定窗口代理设置正确而不是nil吗?"

有人可以详细说明吗?看来MyDocument nib中的Window对象默认连接到File的Owner/Delegate.我还需要做什么?目前它不起作用.

此方法位于项目结构中的MyDocument.m中.我需要额外的代码吗?

- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender  
{
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

macos cocoa objective-c nsdocument

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

如何使用iCloud将Mac OS中的NSDocument与iPad/iPhone同步

我已经看过iOS的iCloud Document示例代码,我用它来同步iCloud 的,现在我试图在没有的Mac OSX应用程序上同步iCloud和UIDocument.

我试图改变UIDocument,NSDocument但与同步的所有方法都不同.我没有找到任何示例代码或教程,除了的文档,这是非常令人困惑和写得不好.

例如,OS X上UIDocument不存在iOS上的以下方法NSDocument:

//doc is an instance of subclassed UIDocument
[doc openWithCompletionHandler:nil];
Run Code Online (Sandbox Code Playgroud)

Apple文档为OS X提供此代码:

- (void)checkIfCloudAvaliable {
    NSURL *ubiquityContainerURL = [[[NSFileManager defaultManager]
                                    URLForUbiquityContainerIdentifier:nil]
                                   URLByAppendingPathComponent:@"Documents"];
    if (ubiquityContainerURL == nil) {
        NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                              NSLocalizedString(@"iCloud does not appear to be configured.", @""),
                              NSLocalizedFailureReasonErrorKey, nil];
        NSError *error = [NSError errorWithDomain:@"Application" code:404
                                         userInfo:dict];
        [self presentError:error modalForWindow:[self windowForSheet] delegate:nil
        didPresentSelector:NULL contextInfo:NULL];
        return; …
Run Code Online (Sandbox Code Playgroud)

macos objective-c nsdocument ios icloud

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

删除"显示/隐藏标签栏"菜单项

最新版本的macOS Sierra在"查看"菜单中添加了"显示/隐藏标签栏"菜单项.

查看菜单项

它动态地执行此操作.

我的应用程序已经使用MMTabBarView库包含自己的选项卡栏.我宁愿继续使用这个库,因为它使我能够向后兼容选项卡,还能够对选项卡进行一些自定义.

关于删除此菜单项,我在Apple NSDocumentNSDocumentController文档中没有看到任何内容.

有没有人对我如何删除它有任何建议?

注意:我不想简单地禁用它,我希望完全删除它.(或者我想首先没有添加它).

macos cocoa nsdocument nsdocumentcontroller

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

让用户选择要打开的文档类型

我正在创建一个NSDocument应用程序,它有两种文档类型:Website和Web Service.这是在我的Info.plist中:

<key>CFBundleDocumentTypes</key>
 <array>
  <dict>
   <key>CFBundleTypeName</key>
   <string>Website</string>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>website</string>
   </array>
   <key>LSTypeIsPackage</key>
   <true/>
   <key>CFBundleTypeRole</key>
   <string>Editor</string>
   <key>LSHandlerRank</key>
   <string>Default</string>
   <key>NSDocumentClass</key>
   <string>AWWebSite</string>
  </dict>
  <dict>
   <key>CFBundleTypeName</key>
   <string>Web Service</string>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>webservice</string>
   </array>
   <key>LSTypeIsPackage</key>
   <true/>
   <key>CFBundleTypeRole</key>
   <string>Editor</string>
   <key>LSHandlerRank</key>
   <string>Default</string>
   <key>NSDocumentClass</key>
   <string>AWWebService</string>
  </dict>
 </array>
Run Code Online (Sandbox Code Playgroud)

现在,每当用户打开应用程序时,从菜单栏中选择"新建"项目,或者在没有打开窗口时单击Dock图标,我想显示一个包含两个选项的窗口,每个选项用于一种文档类型.谁能帮我这个?谢谢

usability cocoa objective-c nsdocument

3
推荐指数
1
解决办法
681
查看次数

阻止打开新的NSDocuments并显示警告消息

我有一个基于NSDocument的应用程序,我想在其中限制同时打开的文档数量(对于Lite版本).我只想拥有n个文档,如果用户尝试打开超过n个,则显示一条消息,其中包含指向完整应用程序下载的链接.

我已经设法使用NSDocumentController计算文档的数量,并且在readFromFileWrapper中,我可以返回FALSE.这会阻止新文档打开,但它会显示标准错误消息.我不知道如何避免这种情况.我想从笔尖打开一个新窗口.

有没有办法阻止NSDocument从readFromFileWrapper返回FALSE时显示标准错误消息?或者是否有任何其他方法可以在调用readFromFileWrapper之前阻止文档打开?

cocoa nsdocument

3
推荐指数
1
解决办法
1577
查看次数

基于Cocoa文档的应用程序,NSWindowController子类为"主窗口"

我有一个基于Cocoa文档的应用程序.我希望"主窗口"由我的子类管理NSWindowController.我创建了子类,并将其接口布局在一个同名的.xib文件中.我最终想要像NSDocument管理窗口一样的行为,而是让它由一个管理NSWindowController.

首先,我该怎么办?其次,在采用这种方法时,我需要考虑的是什么特别的事情,例如如何处理打开和保存?

macos nsdocument nswindowcontroller

3
推荐指数
1
解决办法
1218
查看次数

从NSViewController访问NSDocument,反之亦然

从关联的NSViewController子类访问NSDocument子类的正确方法是什么,反之亦然?

我有以下代码执行前者,但它在视图加载或移动到窗口时不起作用:

var document: Document {
    return NSDocumentController.sharedDocumentController().documentForWindow(view.window!) as! Document
}
Run Code Online (Sandbox Code Playgroud)

model-view-controller cocoa nsdocument nsviewcontroller

3
推荐指数
1
解决办法
1765
查看次数

从故事板启动的初始应用程序无法调用NSDocument init

我已经使用Xcode模板编写了一个带有故事板的macOS文档类型的应用程序,并且在某个地方,初始应用程序启动和文档之间的关联与预期的模式不同,因此我没有期望的NSDocument初始化程序是应用程序首次启动时调用(但此后每个新窗口调用).

我已经将所有四个记录的NSDocument初始化器子类化,如下所示:

public class Simulation: NSDocument {

        override init() {
        debugPrint("--------------------\(#file)->\(#function) called")
        super.init()
    }

    init(contentsOf: URL, ofType: String) throws {
        debugPrint("--------------------\(#file)->\(#function) called")
        fatalError()
    }

    init(for: URL?, withContentsOf: URL, ofType: String) throws {
        debugPrint("--------------------\(#file)->\(#function) called")
        fatalError()
    }
    convenience init(type: String) throws {
        debugPrint("--------------------\(#file)->\(#function) called, type: \(type)")
        self.init()
    }

    public override class func autosavesInPlace() -> Bool {
        debugPrint("--------------------\(#file)->\(#function) called")
        return false
    }
}
Run Code Online (Sandbox Code Playgroud)

应用程序启动时,没有任何内容显示debugPrint输出.应用程序窗口在启动时成功创建,没有明显的文档关联.

但是,我注意到一些我无法解释的奇怪行为:

  1. 虽然我没有看到init调用,但是在应用程序启动文档的某个实例后,会调用autosavesInPlace三次
  2. 当我使用cmd-N(即File-> New,因此newDocument())创建一个新文档时,再调用autosavesInPlace三次,然后执行文档init!
  3. 我从来没有看到makeWindowControllers()的调用

我的NSDocument子类名为Simulation.异常似乎是初始启动中有一些魔法绕过Simulation.init,但之后调用它的每个文档+窗口创建.

这是我的问题:

  1. 为什么初始启动不会调用Simulation.init()?
  2. 当只有那个看似部分构造的初始窗口时,autosavesInPlace如何找到要调用的Simulation实例?

macos init storyboard nsdocument swift

3
推荐指数
1
解决办法
223
查看次数

如何判断 NSWindow 是否被用于浏览文档版本(版本浏览器 UI 的右侧)

OS X 文档版本浏览器(从文件 > 恢复到 > 浏览所有版本)在左侧显示当前版本,在右侧显示旧版本堆栈。

左侧的窗口控制器会收到通知,让您知道它正在进入/退出版本浏览模式。左侧的文档也返回true。回应isBrowsingVersions.

但我不知道如何判断我的窗口何时用于显示实际版本之一(左侧的堆栈)。这些窗口没有收到进入/退出通知及其文档的响应false toisBrowsingVersions`。确定一个窗口是否用于在版本浏览器 UI 中显示文档的旧版本的推荐方法是什么?

到目前为止,我发现的两种方法是:

  1. NSDocumentController.documents 似乎不包含那些浏览过的版本文档。

  2. 浏览过的版本文档 fileURLs 以file:///.DocumentRevisions.

是否有更好的支持/直接方法来确定我的窗口是否正在浏览旧文档版本?在这种情况下,我需要更改一些 UI 行为。

cocoa versions nsdocument nswindow swift

3
推荐指数
1
解决办法
147
查看次数