问题标签 [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 投票
2 回答
849 浏览

iphone - UIManagedDocument 嵌套上下文

我一直在阅读苹果文档,但仍然有一个问题,ai 无法找到答案。我有一个 UIManagedDocument 对象,它有两个嵌套的上下文——一个在主线程上的子上下文和一个在私有线程上的父上下文。接下来,我有一个服务器端。因此,当数据从服务器到达时,我想将其插入到后台线程上的托管文档中。

它是线程安全的吗,创建一个异步队列,在那里创建一个 NSManagedObjectContext 并将其设置为在主线程中创建的父 UIManagedDocument 的子上下文?

换句话说 - 分配给在主线程上创建的私有线程父级上创建的上下文是否线程安全?

0 投票
5 回答
3295 浏览

ios - UIDocument openWithCompletionHandler 未在 iOS 设备上完成

我正在尝试使用打开托管文档openWithCompletionHandler:

我遇到的问题是它在模拟器上运行良好,但是当我在我的 iPhone 4 上测试它时,完成处理程序永远不会完成。代码如下所示:

这在模拟器上运行良好,我可以documentIsReady拨打电话(或者如果出现错误,则会出现“无法打开文档”)。但在 iPhone 4 上,它从不运行 CompletionHandler 块。我已经在整个块中放置了断点(在两个 if 语句之前和之后)并且没有被调用。控制台上没有“无法打开文档”,没有调用documentIsReady.

我还必须提到,我第一次在 iPhone 上运行该应用程序时,它似乎可以正常工作。我也将此封装在带有fileExistsAtPath:调用的 if 语句中。它可以很好地进入 if 语句并调用openWithCompletionHandler:,但完成块永远不会被触发

我正在使用 iOS 5.1 和 Xcode 4.3.2。

0 投票
2 回答
507 浏览

ios - iOS - Core Data - 成功创建/打开之前

概述

我有一个 iOS 项目,我在其中将名称列表存储在表格视图中。

我了解打开/创建数据库的那一刻,有一个完成处理程序来执行一个方法。

脚步:

  1. 就我而言,第一个屏幕是显示名称的表格视图
  2. 有一个 + 按钮(在导航栏上)可以添加一个新名称,该名称会将其带到新屏幕以输入详细信息。

关心

我担心的是,如果我在完成处理程序中获取 tableview 的名称,并且如果用户不等待打开数据库并创建一个新名称,同时保存它,数据库可能不会打开/创建。

问题

  1. 如何处理这样的情况?
  2. 我错过了什么吗?
0 投票
1 回答
1859 浏览

ios - NSFetchedResultsController 无法在子上下文中获取

我有UIManagedDocument一些数据,我使用NSFetchedResultsController. 数据会在后台定期更新,并将更改放入UIManagedDocument.managedObjectContext(使用 performBlock :)。

当我从文档的主要上下文中显示数据时,一切都按预期工作。但是,一旦我在作为主上下文 ( child.parentContext = document.managedObjectContext) 的子上下文的上下文中显示列表,我就看不到任何对象,并且控制台上会打印以下错误:

这仅在将新对象插入文档联系人后才会发生。当我等待足够长的时间自动保存时,列表显示正常。另外问题是只有当我有一个sectionNameKeyPath集合NSFetchedResultsController并且只有子上下文时。

这就是我设置获取结果控制器的方式,没什么特别的,所以我看不出我在这里做错了什么:

[Contact userDefinedSortDescriptors][Contact userDefinedSectionNameKeyPath]在运行时解决。排序描述符包含 sectionNameKeyPath 作为第一个条目。既不是也不是nil其他有趣的东西。

编辑:澄清了一些模糊的部分。具体来说,我不会在文档托管对象上下文中调用 -save:。

编辑 2:我将尝试解释 MOC 之间的关系。

有三个托管对象上下文在起作用:

1)UIManagedDocument.managedObjectContext通过加载文档创建。

2)有一个后台线程正在运行,它会不时更新对象。这是一个以文档 MOC 作为父级的私有队列 moc:

3) 当用户想要进行更改时,将创建一个新的 MOC 作为文档 MOC 的子项。这是一个主队列 MOC。这是用于执行上面显示的提取的上下文。

后台更新是从 NSOperationQueue 完成的,但是对后台 MOC 的所有访问都正确地用-performBlock:. 所有其他访问都是从主线程完成的。

编辑3:在玩一些设置时,NSFetchRequest我发现设置时问题消失了fetchRequest.includesPendingChanges = NO。但这不是一个可行的解决方案,因为现在用户看不到任何更新,直到 UIManagedDocument 将更改保存在后台。

0 投票
1 回答
2027 浏览

ios - 如何同步打开/创建 UIManagedDocument?

如标题所述,我想UIManagedDocument同步打开,即我希望我的执行等到打开完成。我只在 mainThread 上打开文档。

当前打开的 API 使用块

链接中提到的锁使用在主线程以外的线程上运行良好。如果我使用 locks on mainThread,它会冻结应用程序的执行。

任何意见将是有益的。谢谢。

0 投票
1 回答
204 浏览

objective-c - 如何从已知的 url / 文件路径中检索 UIManagedDocument?

我的目的是从已知 url 检索 UIManagedDocument 对象,然后打开它。

就像是:

然后,我可以做类似的事情:

相信我,我确实搜索过苹果的文档,有一个唯一的方法,叫做使用给定的 url 进行初始化。是的,我之前初始化并保存它,然后我只需要拿起它。有什么办法可以做到这一点?

希望哪位大神指点一下,谢谢

0 投票
0 回答
184 浏览

objective-c - 具有多个 NSFetchedResultsController 但只有一个 UIManagedDocument 的 TabBar 应用程序

通过托管文档使用核心数据时,我遇到了一些问题。
我有一个多选项卡应用程序,每个选项卡必须显示单个数据库的不同实体。
为了初始化托管文档,我创建了一个帮助类方法来实例化托管文档、创建它、打开它并添加 plist 文件中的所有数据。接下来,它调用一个块,该块是该方法的参数。这样,我可以从一个选项卡视图中调用所有这些,并通过(通过一个块)创建 fetchedResultsController 的方法。

我这样做是因为我知道数据库打开需要一段时间,而且如果我在打开之前设置 FRC,它将无法正常工作。所以我在打开数据库时执行的块中调用块...。

在标签之间切换时出现了我的问题。我在所有视图中调用这个辅助方法(带有相应的块)viedDidLoad,我认为这会导致数据损坏,因为所有的节省都完成了。

有什么方法可以在第一个视图上只调用一次帮助方法,然后将上下文传递给所有其他选项卡,以确保即使我在开始时快速切换选项卡,它也会起作用?

或者也许我做错了所有的过程,还有另一种方法可以让所有这些工作?我对 Core Data 完全陌生。

提前致谢!

0 投票
0 回答
453 浏览

ios5 - [[UIManagedDocument alloc]initWithFileURL:url] 在模拟器中崩溃,但在 iPad 上有效?

我正在尝试在我的应用程序中设置 managedDocument 并使用 CoreData 更新此文档。我在 viewDidLoad 中将此代码添加到我的应用程序中,我的应用程序现在因 EXC_BAD_ACCESS 而崩溃

我验证了 url 是一个有效的 url。如果我在超出这一点的设备上运行它,只会在模拟器上发生崩溃。

有谁知道从哪里开始解决这个问题?

0 投票
1 回答
2557 浏览

objective-c - 保存 UIManagedDocument 时应用程序崩溃

我有一个应用程序,它首先将一些数据加载到 UIManagedDocument 中,然后执行saveToURL:forSaveOperation:completionHandler:. 在completionHandler 块中,它会更新这个数据库的各种元素,当它完成后,它会再次保存。

除此之外,该应用程序还有 3 个按钮,分别用于重新加载数据、重新更新数据和删除数据库的一个实体。在每个按钮方法中,最后一条指令也是保存。

当我在模拟器中运行所有这些时,一切都很顺利。但在设备中没有。它不断崩溃。我观察到,通常情况下,当按下“删除”按钮,或者重新加载或重新更新数据库时,它会崩溃。它始终在saveToURL运行中。
在我看来,当有多个线程保存数据库时,问题就出现了。由于设备执行代码的速度较慢,可能会同时节省多个成本,而应用程序无法正确处理它们。此外,有时删除按钮不会删除实体,并说不存在(当它存在时)。

我对此完全感到困惑,所有这些保存操作都必须完成......事实上,如果我删除它们,应用程序的行为会更加不连贯。

关于我可以做些什么来解决这个问题的任何建议?非常感谢!

[编辑] 在这里我发布有问题的代码。对于第一次加载数据,我使用了一个帮助类,特别是这两种方法:

在视图中,我有 3 种操作方法,如下所示:

[编辑2]更多代码:首先,初始视图以这种方式执行viewDidLoad:

这就是 setupFetchedResultsController 方法的样子:

应用程序的每个视图(它有选项卡)都有一个不同的 setupFetchedResultsController 以显示数据库包含的不同实体。

现在,在辅助类中,这是第一个通过每个视图的 viewDidLoad 执行的类方法:

0 投票
1 回答
1821 浏览

objective-c - 如何正确初始化、使用和保存 UIManagedDocument

我正在处理使用 UIManagedDocument 让我的应用程序工作。几天前我发布了另一个问题,但我还没有得到它的工作。让我们看看我能不能做得更好。
我的应用程序需要从 plist 文件中加载一些数据并用它填充数据库。然后,有些参数会不时更改,我还需要在数据库中加载和更新它们。
应用程序应遵循以下顺序:创建/打开数据库、加载数据、更新变量数据。
我的问题是在尝试正确遵循该顺序时出现的,主要是因为我无法在数据库中创建所有对象之前更新变量数据(因此必须更新 nil 变量),而我的解决方法只会导致我出乎意料崩溃和不合逻辑的行为。
这里'

在视图代码中:

然后我使用这个助手类“DataHelper”,它包含以下代码:

如果我使用“saveToURL”方法,虽然它看起来不正确,但它会正确执行加载顺序,因为在所有数据都加载到数据库之前不会执行最后一个方法。但是,当尝试执行许多操作时,应用程序会随机崩溃(内部有很多节省,例如删除、更新或重新加载)。
另一方面,通过使用“updateChangeCount”,应用程序不再崩溃,但序列不能正常工作:变量数据没有更新,应用程序找不到存在的对象,on数据库等等。如果我在每个动作之间等待 2 分钟左右,那么是的,它有效……但这不是我想要的。

我真的很感谢这里的一些帮助,这很浪费我的时间,而且这个项目的截止日期已经很近
了 :( 非常感谢!