问题标签 [nspersistentdocument]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
680 浏览

objective-c - 基于 NSDocument 的应用程序和 NSToolbar

我有基于 NSDocument (NSPersistentDocument) 的应用程序,在应用程序中我可以(通常)创建多个文档。

主文档窗口(基于 NSPersistentDocument)已添加 IB、工具栏。在代码中,我使用方法insertItemWithItemIdentifier- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag.

代码示例:

在我只打开一个文档之前,一切都是正确的。当我在第一个文档窗口工具栏上打开第二个文档(或创建新文档)时,工具栏项目加倍(打开第三个文档后,第一个窗口上的项目增加三倍,第二个窗口增加一倍,依此类推)。

编辑:我注意到,itemForItemIdentifier每次我尝试添加工具栏项时,都会在每个窗口上调用它。例如:如果我有两个窗口(两个打开的文档),并且在一个窗口上我尝试添加一个按钮itemForItemIdentifier被调用两次。
这对我来说很奇怪,因为每个文档都有自己的工具栏,其中委托仅设置为此文档。

我不知道我做错了什么。也许有人会指出我犯错的地方。

0 投票
1 回答
473 浏览

core-data - 新项目新模型 NSPersistentDocument 这个 NSPersistentStoreCoordinator 没有持久存储

我一直在搜索 stackoverflow 和谷歌搜索几个小时。我做了一个简单的项目来处理 Core Data 和绑定。它在模型中添加了一个实体,但它不再工作了。每当我尝试将数据添加到新文档时,我都会收到“此 NSPersistentStoreCoordinator 没有持久存储它无法执行保存操作”。我遵循了我能找到的每一条建议,但没有运气。

最后,我制作了一个新项目(基于 NSPersistentDocument),并从头开始制作了一个新模型。在我第一次运行项目之前,我确保模型是完美的。

在WindowControllerDidLoadNib中:项目调用方法添加数据。在 addData 例程之前,我记录了 ManagedObjectContext 和 ManagedObjectModel。它们都不是零。

我仍然得到这个 %$&#@! 错误。

有没有人对此有任何新的想法?

编辑:这可能是因为从未保存过新的无标题文档吗?如果是这样,你如何解决这个问题?您可以保存无标题的文档吗?你真的想要吗?

不久前我在文件导入时遇到了类似的问题。由于我拥有完全控制权,我命名并保存了文档,然后我能够保存上下文。

0 投票
1 回答
189 浏览

cocoa - NSPersistentDocument 和 NSArrayController 与 MagicalRecord

我有一个项目,我使用 Core Data 绑定到 NSArrayControllers。我找到了 MagicalRecord 并开始实施它。

我的问题是,如何在没有 AppDelegate 的情况下实现 MagicalRecord?还是我应该创建自己的 AppDelegate 并在那里实现它?

在此先感谢,米凯尔

0 投票
1 回答
132 浏览

multithreading - 在主线程中添加的线程中读取数据的核心数据

我有一个基于 Mac 文档的应用程序,使用 NSPersistentDocument 作为文档模型。

创建新文档时,应用程序会在 initiWithType 方法中将一些默认数据(一些运动对象和用户数据)添加到文档中。

}

该应用程序有一个导入功能,可以从一些硬件中导入数据,它在一个线程中运行,我设置如下(managedObjectContext 是 NSPersistentDocument 的):

数据从硬件导入到许多 NSManagedDataObject 项中。每个 ManagedObject 都有一个“Sport”字段,需要用创建文档时创建的运动对象之一填充该字段。

但是,- (id)initWithType:(NSString *)typeName error:(NSError **)outError线程 (moc) 中的新 ManagedObjectContext 中不存在任何已添加的运动对象。

如果我运行应用程序,创建一个新文档,然后让应用程序空闲一分钟左右,然后尝试导入,那么 Sport 对象确实存在于线程托管对象上下文中。

如何将线程中的新 ManagedObjectContext 与 NSPersistantDocument 中的主线程同步?

我试过:[managedObjectContext processPendingChanges];[managedObjectContext setStalenessInterval];,但似乎都不能解决这个问题。

有趣的是,这似乎不会在 Mac OS X 10.8 中发生,仅在 10.7 中发生

0 投票
1 回答
113 浏览

core-data - NSPersistentDocument 文档中的外部记录发生了什么?

我只是想使用 NSPersistentDocument 并且在我的数据模型中我喜欢存储一些二进制数据。

好吧,自 10.7 Core Data 开始提供外部存储功能。当您将它与 NSPersistentDocument 结合使用时,是否有人知道甚至有测试(可能是一些示例)会发生什么?

我想我读过,如果您在其中放入至少 1MB 的二进制数据,核心数据将创建一个单独的文件并仅在数据库中存储一个 ref。但是如果将它与 NSPersistentDocument 一起使用会发生什么?如果它创建一个bundel并管理文件夹中的外部文件,我会很好。

有人试过吗?

0 投票
1 回答
280 浏览

core-data - 如何从 Core Data (Xcode) 中的 managedObjectContext 读取对象

我有一个程序可以在 tableView 中获取一些数字。我有一个基于核心数据的程序,它有一个带有一些属性的实体,并且可以将 tableview 的列绑定到这些属性。现在我想要每列的总和,但找不到如何读取行中的每个数据来添加它们。我用了

NSString* S= [self.managedObjectContext valueAtIndex:1 inPropertyWithKey:@"aColumnName" ];

但我收到此错误:

此类与键名的键值编码不兼容。

任何人都可以帮助我吗?

0 投票
1 回答
348 浏览

objective-c - Coredata & NSPersistentDocument:列号总和崩溃

我的程序中的列的@sum 绑定有问题:

我正在做一个基于 Coredata、NSPersistentDocument 的程序。我主要从 IB 做所有事情,创建数据模型、NSArrayController 和 NSTableView ......

我只有 1 个具有 62 个属性(61 个 NSString 和 1 个 NSNumber)的实体。我导入了一个包含 12722 条记录的 CSV 文件。导入效果很好,可以保存到 xml、二进制、sqlite...我已经仔细检查了整个过程是否完美。可以保存/加载。一切都在那里。

我遇到的问题:我创建了一个标签,我将其绑定到具有 NSNumber 属性的列的@sum。我就是这样做的

当我运行程序时,单击导入,选择所有行,@sum 运行良好。它很快,但是这是第一个问题:一旦我保存文件(尝试了所有... binary/xml/sqlite)并稍后加载它并尝试再次选择全部,程序崩溃而没有错误

通过“配置文件”-> 分配尝试。我注意到:

  • 我没有内存泄漏
  • 从磁盘加载然后全选时:速度非常慢。5 分钟后还没有完成(我停止了它),我看到了 +45MB 的 CFNumber(实时字节)和 >1.500.00#Overall。所以,这里出了点问题,因为我说的是 12722 行/Interger32 类型的寄存器。

第二个问题是相同的,但从不同的角度再现。我没有使用“选择”,而是尝试使用“arrangedObjects”。在这种情况下,即使从 CSV 导入也会出现问题,它变得非常缓慢,最终崩溃。尝试打开已经创建的文件也会崩溃。

这就是我做标签->绑定检查器->值的方式

您能否帮助我了解要查找的内容或可以帮助我找到问题所在的想法?

非常感谢。

路易斯


---- 更多研究后的新编辑 ----

我找到了一个我不理解的解决方法,请评论/回答非常感谢。

我的程序使用 Coredata (SQLite)、NSPersistentDocument、NSTableView 和 NSArrayController。我想让一个工作的 NSTextField 绑定到 @sum 集合操作

问题:只要我打开一个填充了 SQLite DB 的现有文档,并尝试从 NSWindowController 绑定到排列对象。@sum.t_24_Bookings,程序就会崩溃。

我最初的猜测与加载 nib 后无法访问对象控制器的内容有关,但是我遵循了执行第一次 Fetch 的建议,但没有成功:

继续这个想法,我发现如果我创建一个“真正的”完整 Fetch + 我从 Document 子类执行 @sum 访问,那么它就可以工作。

这是我为了使解决方法起作用而放置的带有注释的代码。

ABDocument 接口(一个 NSPersistentDocument 子类)

AB文档实施

ABWindowController(加载我的NIB的控制器)

请如果你能评论真的很感激,我有一个解决方案,但我不明白为什么。

坦克,
路易斯

0 投票
0 回答
91 浏览

cocoa - 区分 NSAutosaveElsewhereOperation 中的用例

我尝试将 AutoSave 支持添加到Core Data File Wrapper 示例

现在,如果我有一个writeSafelyToURL使用 NSAutosaveElsewhereOperation 类型调用的新/无标题文档。

不好的是,我在两个典型用例中都得到了这种类型 - 新文件:它通过创建文件包装器和持久存储文件来存储一个完整的新文档 - 保存差异:文件包装器已经存在并且只需要更新.

其他人是否已经处理过这个主题或者是否有人已经迁移了这个?

原始示例使用originalStoreURL来区分这两个用例,哪种解决方案最适合您?

谢谢

0 投票
1 回答
389 浏览

objective-c - autosavesInPlace 导致新文档保存失败

autosavesInPlace我有一个基于 NSPersistentDocument 的应用程序,当设置为 return时无法保存新文档YES,returnNO并且问题消失了。

  • 我创建一个新文档
  • 做一些改变
  • 保存它,这样运行NSSaveAsOperation,文档的名称和 URL 发生了变化,一切看起来都很好,但是下一次保存会抛出一个非常具有描述性的内容

NSPersistentStoreSaveError = 134030, // unclassified save error - something we depend on returned an error

这仅在文档尝试在NSSaveAsOperation. 任何其他保存类型都可以正常工作,就像对现有文档的更改一样。有趣的效果是,如果我不更改名称或位置,我也不会遇到这个问题。

我得到一个异常回溯

帧 #0:0x00007fff988143c5 libobjc.A.dylib objc_exception_throw frame #1: 0x00007fff94c5f5f9 CoreData-[NSPersistentStore(_NSInternalMethods) _preflightCrossCheck] + 697 帧 #2:0x00007fff94c3198b CoreData -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 603 frame #3: 0x00007fff94c5aa98 CoreData-[NSManagedObjectContext 保存:] + 456 帧 #4:0x00007fff91baa101 -[NSPersistentDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:] + 3743 frame #5: 0x0000000100002de7 ZZZZAppZURLType:forSaveZOperation:DocumentwriteToURL:forSaveZOpera :error:] + 135 在 ZZZZDocument.m:209 帧 #6: 0x00007fff91baabc7 AppKit -[NSPersistentDocument writeSafelyToURL:ofType:forSaveOperation:error:] + 611 frame #7: 0x0000000100002ea3 ZZZZ-[ZZZZDocument writeSafelyToURL:ofType:forSaveOperation:error:] + 115 在 ZZZZDocument.m:223

有任何想法吗?

0 投票
1 回答
1004 浏览

objective-c - 如何在 NSPersistentDocument 中强制创建默认的 persistentStore/autosave

我有一个使用 CoreData 的基于文档的 Cocoa 应用程序,它可以导入大量数据。由于此导入需要一些时间,因此我在后台执行此操作,但由于NSManagedObjectContext不是线程保存,因此我使用文档persistentStoreCoordinator的of在后台线程中managedObjectContext创建了一个新线程。NSManagedObjectContext现在,当导入完成时,我保存背景managedObjectContext以通知文档的主线程managedObjectContext更改并合并它们。据我了解,这就是应该使用 CoreData 进行并发的方式。

但有时,当我调用时persistentStoreCoordinator没有会导致保存失败和应用程序崩溃。我正在使用自动保存和所有(在 OS X 10.8 上基本上是未修改的 NSPersistentDocument),所以我认为我不必关心它是如何保存的,它会“正常工作”。persistentStore[managedObjectContex save:]

显然,事实并非如此。我尝试强制执行自动保存操作,希望通过在我的文档子类[self autosaveDocumentWithDelegate:self didAutosaveSelector:@selector(document:didAutosave:contextInfo:) contextInfo:nil];的末尾调用来创建一个 persistentStore windowControllerDidLoadNib:,但这似乎并没有改变任何东西。委托回调 ( - (void)document:(NSDocument *)document didAutosave:(BOOL)didAutosaveSuccessfully contextInfo:(void *)contextInfo) 实际上表明自动保存是成功的,尽管任何 fileURL 或相关访问器都没有返回非 nil 的东西,也没有创建持久存储。

我也想过给-(BOOL)configurePersistentStoreCoordinatorForURL:(NSURL *)url ofType:(NSString *)fileType modelConfiguration:(NSString *)configuration storeOptions:(NSDictionary *)storeOptions error:(NSError *__autoreleasing *)error自己打电话,但我不知道用什么 URL 让它像普通的自动保存一样。我检查了backupFileURL,但最后都还是fileURLnil 。事实上,他们甚至没有被调用,所以我不知道如何获得“正确”的 URL。autosavedContentsFileURLwindowControllerDidLoadNib:writeToURL:...configurePersistentStoreCoordinatorForURL:...

为了更好地理解创建持久存储方式和时间,我在writeToURL:...和中设置了断点configurePersistentStoreCoordinatorForURL:...。我注意到configurePersistentStoreCoordinatorForURL:当应用程序失去最前面的状态时会调用它。但是,当我刚刚创建一个新文档并尝试在创建后立即导入某些内容时(无需先切换到另一个应用程序以导致创建 persistentStore),它就会崩溃。如果我切换到另一个应用程序,则会创建商店并且一切正常。顺便说一句,用于以这种方式创建的 persistentStore 的 URL 始终位于 temp 目录中的某个位置。

难道我做错了什么?我不必调用 [managedObjectContext save:] 来通知其他 managedObjectContext 更改吗?如何强制文档创建其临时持久存储?为什么不调用autosaveDocumentWithDelegate:...实际保存文档(并因此创建一个persistentStore)?

有关的: