问题标签 [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.
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!
objective-c - UIManagedDocument 文件修改日期没有改变
使用正确的保存 API 方法打开、关闭、更改数据和保存文档UIDocument
不会更改从fileModificationDate
属性返回的值。
从文档:
修改日期由
openWithCompletionHandler:
、saveToURL:forSaveOperation:completionHandler:
和revertToContentsOfURL:completionHandler:
方法更新。
但fileModificationDate
始终报告文档文件包装器的创建日期,无论核心数据存储是否被更新。
这当然不是正常行为,对吧?
没有特定的额外代码。简单地说,这是 UIManagedDocument 的子类。UIManagedDocument 自动管理文档包装器内的核心数据存储。代码就这么简单:
将始终返回文档的创建日期。创建日期和修改日期都是相同的,即第一次保存文档以进行创建的日期。但是,内容存储文件的修改日期发生了变化,创建日期与文档包装器相同。
iphone - 核心数据 - UIManagedDocument 不会打开
我正在使用 Core Data 来存储一些与每个用户相关的简单字符串。当应用程序第一次启动时,一切似乎都很好。数据库打开,我成功地保存和检索数据。
但是,经过一些使用后,有时UIManagedDocument
我使用的应用程序启动时将无法打开。这是我使用的方法(在应用程序委托中完成):
此代码从我的应用程序的didFinishLaunchingWithOptions
. if 语句的saveToURL
一半最初被调用,并返回成功。然后在接下来的几个调用中openWithCompletionHandler:
被调用,并成功返回。
但是,在使用该应用程序一段时间后,openWithCompletionHandler:
返回成功 = FALSE。我不知道为什么,或者是如何UIManagedDocument
搞砸的。URL 似乎仍然相同,并且fileExistsAtPath
仍在返回YES
。
有谁知道为什么会发生这种情况?或者,如果我有办法调试并找出导致打开失败的实际错误是什么?
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 代码:
iphone - 从 GCD 后台队列添加到 UIManagedDocument?
我正在从后台队列创建许多托管对象并将其添加到 Core Data。我的理解是我无法从后台线程访问上下文,因此我使用 performBlock 来安排将 Core Data 添加回创建上下文的同一队列中。这工作得很好......
我的问题是在测试期间我注意到通过删除[moc performBlock:^{ ... }];
应用程序仍然可以按预期执行(甚至可能快几分之一秒)我需要performBlock
吗?我会假设我这样做并且它只是以非线程安全的方式工作(目前:),我只是想检查以确保我的理解没有缺陷。
编辑:为 createRodInContext 添加了实现 ...
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/
关于 dispatch_queue_t 和 dispatch_sync 的调用
Grand Central Dispatch (GCD) 与 performSelector - 需要更好的解释
iOS - 如何在线程(使用 GCD)结束它的工作时收到通知
我试过:阻塞主线程直到我得到 NSNotification(在 CATManagedDocumentHandler 中设置)&阻塞主线程直到我得到一个块回调。
这些都不起作用。我的应用程序只是冻结。我想错了吗?如何让委托方法等到我的文档打开/准备好?或者我应该采取不同的方法吗?
谢谢
卡尔。
ios - 来自 App Delegate 的启动任务并避免竞争条件的策略
我正在基于核心数据开发一个小型应用程序。在启动时,我需要启动一项维护任务——快速但重要——。要运行此任务,应用程序委托必须打开一个 UIManagedDocument,并对其执行各种检查。在检查完成之前,应用程序视图不得启动。因为打开 UIMD 是异步的,所以当第一个 UIview 尝试访问文档时,应用程序委托不会完成。然后应用程序由于竞争条件而崩溃,因为应用程序委托和视图试图同时打开文档,而文档状态尚未最终确定。
我正在使用情节提要,因此 segues 几乎可以控制操作系统...下次,我将手动完成所有操作..
你有什么建议?注意:1)我不能在应用程序时执行任务。进入后台状态,因为如果再次恢复,避免底层数据库和视图中显示的状态不一致会非常乏味。2)出于同样的原因,在正常执行期间执行维护任务并不容易。3) 所有视图都通过单例访问 UIMD,根据这里提出的代码
在 UIView 中设置互斥锁不是我的首选路线,因为屏幕保持黑色 - 没有数据 - 在显示选项卡栏时,直到它被应用程序委托释放。
有没有办法让应用程序委托在将控制权交给 UIViews 之前等待信号?在这种情况下,有什么陷阱吗?我怀疑这可能不是推荐的方法,如果代理等待维护任务完成的时间过长,iOS 可能会终止应用程序。在这种情况下,什么是“太长”?
ios - UIManagedDocument openWithCompletionHandler 返回 NO
所以我正在将我的核心数据迁移到 UIManagedDocument。
在 iPhone 模拟器上调用 openWithCompletionHandler 可以正常工作,但是当我尝试在真实设备上运行我的项目时,它总是返回 NO。我覆盖了handleError,这就是我得到的:
这就是我所说的:
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...)
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))