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年前开始)报告成功覆盖该方法,更改选项字典,然后在"超级"上重新调用它.遗憾的是,那对我不起作用.如果你有类似的问题,我建议先尝试一下 - 如果它仍然不起作用,那么回到这里:)
我不清楚如何阻止基于文档的应用程序在启动时显示空文档.
在我发布的上一个问题中,有人说:"你确定窗口代理设置正确而不是nil吗?"
有人可以详细说明吗?看来MyDocument nib中的Window对象默认连接到File的Owner/Delegate.我还需要做什么?目前它不起作用.
此方法位于项目结构中的MyDocument.m中.我需要额外的代码吗?
- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender
{
return NO;
}
Run Code Online (Sandbox Code Playgroud) 我已经看过iOS的iCloud Document示例代码,我用它来同步iCloud 的uidocument,现在我试图在没有的Mac OSX应用程序上同步iCloud和nsdocumentUIDocument.
我试图改变UIDocument,NSDocument但与icloud同步的所有方法都不同.我没有找到任何示例代码或教程,除了苹果的文档,这是非常令人困惑和写得不好.
例如,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 Sierra在"查看"菜单中添加了"显示/隐藏标签栏"菜单项.
它动态地执行此操作.
我的应用程序已经使用MMTabBarView库包含自己的选项卡栏.我宁愿继续使用这个库,因为它使我能够向后兼容选项卡,还能够对选项卡进行一些自定义.
关于删除此菜单项,我在Apple NSDocument或NSDocumentController文档中没有看到任何内容.
有没有人对我如何删除它有任何建议?
注意:我不想简单地禁用它,我希望完全删除它.(或者我想首先没有添加它).
我正在创建一个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图标,我想显示一个包含两个选项的窗口,每个选项用于一种文档类型.谁能帮我这个?谢谢
我有一个基于NSDocument的应用程序,我想在其中限制同时打开的文档数量(对于Lite版本).我只想拥有n个文档,如果用户尝试打开超过n个,则显示一条消息,其中包含指向完整应用程序下载的链接.
我已经设法使用NSDocumentController计算文档的数量,并且在readFromFileWrapper中,我可以返回FALSE.这会阻止新文档打开,但它会显示标准错误消息.我不知道如何避免这种情况.我想从笔尖打开一个新窗口.
有没有办法阻止NSDocument从readFromFileWrapper返回FALSE时显示标准错误消息?或者是否有任何其他方法可以在调用readFromFileWrapper之前阻止文档打开?
我有一个基于Cocoa文档的应用程序.我希望"主窗口"由我的子类管理NSWindowController.我创建了子类,并将其接口布局在一个同名的.xib文件中.我最终想要像NSDocument管理窗口一样的行为,而是让它由一个管理NSWindowController.
首先,我该怎么办?其次,在采用这种方法时,我需要考虑的是什么特别的事情,例如如何处理打开和保存?
从关联的NSViewController子类访问NSDocument子类的正确方法是什么,反之亦然?
我有以下代码执行前者,但它在视图加载或移动到窗口时不起作用:
var document: Document {
return NSDocumentController.sharedDocumentController().documentForWindow(view.window!) as! Document
}
Run Code Online (Sandbox Code Playgroud) 我已经使用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输出.应用程序窗口在启动时成功创建,没有明显的文档关联.
但是,我注意到一些我无法解释的奇怪行为:
我的NSDocument子类名为Simulation.异常似乎是初始启动中有一些魔法绕过Simulation.init,但之后调用它的每个文档+窗口创建.
这是我的问题:
OS X 文档版本浏览器(从文件 > 恢复到 > 浏览所有版本)在左侧显示当前版本,在右侧显示旧版本堆栈。
左侧的窗口控制器会收到通知,让您知道它正在进入/退出版本浏览模式。左侧的文档也返回true。回应isBrowsingVersions.
但我不知道如何判断我的窗口何时用于显示实际版本之一(左侧的堆栈)。这些窗口没有收到进入/退出通知及其文档的响应false toisBrowsingVersions`。确定一个窗口是否用于在版本浏览器 UI 中显示文档的旧版本的推荐方法是什么?
到目前为止,我发现的两种方法是:
NSDocumentController.documents 似乎不包含那些浏览过的版本文档。
浏览过的版本文档 fileURLs 以file:///.DocumentRevisions.
是否有更好的支持/直接方法来确定我的窗口是否正在浏览旧文档版本?在这种情况下,我需要更改一些 UI 行为。
nsdocument ×10
cocoa ×6
macos ×6
objective-c ×3
swift ×2
core-data ×1
icloud ×1
init ×1
ios ×1
nswindow ×1
storyboard ×1
usability ×1
versions ×1