问题标签 [uimanageddocument]

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 投票
1 回答
119 浏览

objective-c - Fetching data from database (CoreData)

I have two questions:

1- Do i need to have the same UImanagedDocument to enter entities and fetch them, or is it possible to enter and read the data from different objects?

2- Is there any way to confirm that data has been entered to the database? (except for fetching the data)

Thanks!

0 投票
0 回答
268 浏览

objective-c - UIManagedDocument 文件修改日期没有改变

使用正确的保存 API 方法打开、关闭、更改数据和保存文档UIDocument不会更改从fileModificationDate属性返回的值。

文档

修改日期由openWithCompletionHandler:saveToURL:forSaveOperation:completionHandler:revertToContentsOfURL:completionHandler:方法更新。

fileModificationDate始终报告文档文件包装器的创建日期,无论核心数据存储是否被更新。

这当然不是正常行为,对吧?

没有特定的额外代码。简单地说,这是 UIManagedDocument 的子类。UIManagedDocument 自动管理文档包装器内的核心数据存储。代码就这么简单:

将始终返回文档的创建日期。创建日期和修改日期都是相同的,即第一次保存文档以进行创建的日期。但是,内容存储文件的修改日期发生了变化,创建日期与文档包装器相同。

0 投票
0 回答
296 浏览

iphone - 核心数据 - UIManagedDocument 不会打开

我正在使用 Core Data 来存储一些与每个用户相关的简单字符串。当应用程序第一次启动时,一切似乎都很好。数据库打开,我成功地保存和检索数据。

但是,经过一些使用后,有时UIManagedDocument我使用的应用程序启动时将无法打开。这是我使用的方法(在应用程序委托中完成):

此代码从我的应用程序的didFinishLaunchingWithOptions. if 语句的saveToURL一半最初被调用,并返回成功。然后在接下来的几个调用中openWithCompletionHandler:被调用,并成功返回。

但是,在使用该应用程序一段时间后,openWithCompletionHandler:返回成功 = FALSE。我不知道为什么,或者是如何UIManagedDocument搞砸的。URL 似乎仍然相同,并且fileExistsAtPath仍在返回YES

有谁知道为什么会发生这种情况?或者,如果我有办法调试并找出导致打开失败的实际错误是什么?

0 投票
3 回答
1203 浏览

ios - UIManagedDocument 单例代码 openWithCompletionHandler 调用了两次并崩溃

我正在使用 Justin Driscoll 在Core Data 上的实现和单个共享 UIManagedDocument。在我将它移到 iPad 故事板和 ipad 应用程序的 splitview 控制器之前,我的 iphone 应用程序中的一切都很好。问题是 openwithCompletionHandler 被调用了两次,一次是在 viewDidLoad 的主视图中,一次是在我的详细视图 viewWillLoad 中。这些调用是快速连续的,因为当第二次调用我的单例的 performWithDocument 方法(如下)时,文档仍处于 UIDocumentStateClosed 中,因此应用程序崩溃了。我查看了 e_x_p 对 iOS5.1 后的回答:同步任务(等待完成)但是@sychronized 在这种情况下将不起作用,因为下面的 performWithDocument 是在同一个线程上调用的。我将如何防止对 openwithCompletionHandler 的多次调用?我能想到的防止这种情况的唯一方法是暂停执行上述调用之一,直到我确定 UIDocumentStateNormal 为真,然后释放。但这会冻结不好的主 UI 线程。在不冻结 UI 的情况下,最好的方法是什么?

从 UIManagedDocumentSingleton 代码:

0 投票
1 回答
308 浏览

iphone - 从 GCD 后台队列添加到 UIManagedDocument?

我正在从后台队列创建许多托管对象并将其添加到 Core Data。我的理解是我无法从后台线程访问上下文,因此我使用 performBlock 来安排将 Core Data 添加回创建上下文的同一队列中。这工作得很好......

我的问题是在测试期间我注意到通过删除[moc performBlock:^{ ... }];应用程序仍然可以按预期执行(甚至可能快几分之一秒)我需要performBlock吗?我会假设我这样做并且它只是以非线程安全的方式工作(目前:),我只是想检查以确保我的理解没有缺陷。

编辑:为 createRodInContext 添加了实现 ...

0 投票
1 回答
601 浏览

objective-c - 如何在调用 NSFetchedResultsController 方法之前确保 UIManagedDocument 准备就绪?

我完全坚持这个。我的基本问题是我的:

方法在尝试读取我的核心核心实体时崩溃,因为 managedObjectContext / UIManagedDocument 为零。目前我认为这是因为我的 UIManagedDocument 没有打开/准备好。所以在过去的 3 个小时里,我一直在努力做到这一点,以便在文档打开之前不会触发我的委托方法。

这是我用来获取文档的代码:

这在我的应用程序的任何其他地方都可以正常工作,但对于我的 tableView 中的委托方法来说,打开过程似乎不够快。

到目前为止我看过的链接:

http://omegadelta.net/2011/05/10/how-to-wait-for-ios-methods-with-completion-blocks-to-finish/

执行代码块代替@selector

关于 dispatch_queue_t 和 dispatch_sync 的调用

Grand Central Dispatch (GCD) 与 performSelector - 需要更好的解释

GCD 在主线程中执行任务

iOS - 如何在线程(使用 GCD)结束它的工作时收到通知

我试过:阻塞主线程直到我得到 NSNotification(在 CATManagedDocumentHandler 中设置)&阻塞主线程直到我得到一个块回调。

这些都不起作用。我的应用程序只是冻结。我想错了吗?如何让委托方法等到我的文档打开/准备好?或者我应该采取不同的方法吗?

谢谢

卡尔。

0 投票
1 回答
259 浏览

ios - 来自 App Delegate 的启动任务并避免竞争条件的策略

我正在基于核心数据开发一个小型应用程序。在启动时,我需要启动一项维护任务——快速但重要——。要运行此任务,应用程序委托必须打开一个 UIManagedDocument,并对其执行各种检查。在检查完成之前,应用程序视图不得启动。因为打开 UIMD 是异步的,所以当第一个 UIview 尝试访问文档时,应用程序委托不会完成。然后应用程序由于竞争条件而崩溃,因为应用程序委托和视图试图同时打开文档,而文档状态尚未最终确定。

我正在使用情节提要,因此 segues 几乎可以控制操作系统...下次,我将手动完成所有操作..

你有什么建议?注意:1)我不能在应用程序时执行任务。进入后台状态,因为如果再次恢复,避免底层数据库和视图中显示的状态不一致会非常乏味。2)出于同样的原因,在正常执行期间执行维护任务并不容易。3) 所有视图都通过单例访问 UIMD,根据这里提出的代码

在 UIView 中设置互斥锁不是我的首选路线,因为屏幕保持黑色 - 没有数据 - 在显示选项卡栏时,直到它被应用程序委托释放。

有没有办法让应用程序委托在将控制权交给 UIViews 之前等待信号?在这种情况下,有什么陷阱吗?我怀疑这可能不是推荐的方法,如果代理等待维护任务完成的时间过长,iOS 可能会终止应用程序。在这种情况下,什么是“太长”?

0 投票
1 回答
489 浏览

ios - UIManagedDocument openWithCompletionHandler 返回 NO

所以我正在将我的核心数据迁移到 UIManagedDocument。

在 iPhone 模拟器上调用 openWithCompletionHandler 可以正常工作,但是当我尝试在真实设备上运行我的项目时,它总是返回 NO。我覆盖了handleError,这就是我得到的:

这就是我所说的:

0 投票
1 回答
1353 浏览

ios - iOS UIManagedDocument:无法打开预加载的持久存储

我正在尝试在基于 UIManagedDocument 的应用程序中预加载持久存储以处理核心数据。

我尝试在应用程序 B 中使用的持久性商店是“生成”并通过应用程序 A 填充。在应用程序 A 和 BI 中,使用 Justin Driscoll 的 UIManagedDocument 处理程序(在此处可用,感谢 Driscoll 先生!)。一切都在应用程序 A 中完美运行。

基于此线程中解释的技术:Pre-load core data database in iOS 5 with UIManagedDocument,我尝试将持久存储放在B的应用程序包中,并在需要时将此存储复制到文档文件夹中(如果没有完成before) 在实例化之前的 init 中。

从捆绑包复制到文档都可以(我尝试了不同的方法并检查了创建,这要归功于 finder 和 nslog),但我就是无法打开“文档”。应用程序不会崩溃,显示视图但表为空(我使用与应用程序 A 完全相同的代码,具有相同的 fetchedResultsController)。首先我认为复制的持久存储是空的,然后我意识到我无法正确打开文档/复制的持久存储)=> 文档状态 = 5,这意味着 UIDocumentStateClosed 和 UIDocumentStateSavingError 的错误(如果我正确解释它??? )

(注意:我也尝试直接从包中实例化和打开文档,但我遇到了同样的问题:doc state = 5)

所以... 与此文档状态 = 5 战斗三天,不知道要修复什么

我想我放在应用程序 B 包中的文件有问题(目前我从 finder 拖放到 xcode 并选择了“为任何添加的文件夹创建文件夹引用”)也许是关于一些选项、元数据或文件权限或...

关于调查什么的任何想法?

(我不认为这与以下代码有关,但是...)这是我的初始化方式(基于 Justin Driscoll 处理程序。只有 custo 是:我检查文档文件夹中是否有存储包,如果没有,我创建它基于在捆绑包中的文件上)

只有我对 Driscoll 先生提供的 performWithDocument 代码所做的“修改”是一些 nslog,以查看发生了什么(每次第一次打开尝试时,doc 状态从 1 变为 5,然后坚持 5...)

0 投票
1 回答
246 浏览

core-data - Fetch on Core Data 可以在模拟器上运行,但不能在设备上运行

我有一个应用程序,我在其中展示 VC1 来选择游戏,并展示 VC2 来提交所选游戏的播放。当用户从 VC2 切换回 VC1 时,我想保留他们正在玩的游戏的游戏数据。由于它是 iOS 6.0,我使用 UIManagedDocument 来访问 Core Data 以存储和检索游戏数据。我完全被我所面临的问题难住了,在花费了无数个小时之后,我正在与这个论坛上的智者联系。

当我在模拟器中运行下面的代码时,一切正常,数据被存储,如果用户选择与之前玩的游戏相同的游戏,我也能够检索并显示它。不幸的是,在设备上,我可以看到数据存储在 segue 上 - 我放置了一个断点并使用 iExplorer 查看了 persistentStore - 但是一旦我回到 VC2 选择存储的游戏,persistentStore 似乎被覆盖或清除的所有数据。在调试器中,我注意到“UIManagedDocument”的_persistentStoreCoordinator 对象的_persistentStores NSArray 属性在设备上完成检索时始终显示为0。

任何帮助深表感谢!!!

有关持久存储的一些日志信息

DEVICE
首先进入VC2
Printing description of document->_persistentStoreCoordinator: Printing description of document->_persistentStoreCoordinator-> persistentStores: < _NSArrayM 0x1fd28ce0>(

)

首先在 VC2 中设置退出 VC2
Printing description of document->_persistentStoreCoordinator: Printing description of document->_persistentStoreCoordinator-> persistentStores: < _NSArrayM 0x1fd28ce0>( (URL: file://localhost/var/mobile/Applications/4DD2D219-5AC1- 406F-8020-260B01E46E0C/Documents/GameDB/StoreContent/persistentStore) )

二进VC2
Printing description of document->_persistentStoreCoordinator: Printing description of document->_persistentStoreCoordinator-> persistentStores: < _NSArrayM 0x211d4660>(

)

SIMULATOR
首先进入VC2
Printing description of document->_persistentStoreCoordinator: Printing description of document->_persistentStoreCoordinator-> persistentStores: < _NSArrayM 0x84e4b60>( (URL: file://localhost/Users/Rujul/Library/Application%20Support/iPhone %20Simulator/6.0/Applications/B187169B-8D32-4BB1-AB41-33DB76637D9C/Documents/GameDB/StoreContent/persistentStore))

首先在退出 VC2
打印文档描述->_persistentStoreCoordinator:打印文档描述->_persistentStoreCoordinator-> persistentStores:< _ NSArrayM 0x84e4b60>((URL:file://localhost/Users/Rujul/Library/Application%20Support/iPhone% 20Simulator/6.0/Applications/B187169B-8D32-4BB1-AB41-33DB76637D9C/Documents/GameDB/StoreContent/persistentStore))

二进VC2
Printing description of document->_persistentStoreCoordinator: Printing description of document->_persistentStoreCoordinator-> persistentStores: < _NSArrayM 0xf777910>((URL: file://localhost/Users/Rujul/Library/Application%20Support/iPhone% 20Simulator/6.0/Applications/B187169B-8D32-4BB1-AB41-33DB76637D9C/Documents/GameDB/StoreContent/persistentStore))