向核心数据添加大量数据,同时保持 UI 响应能力

发布于 2024-10-30 10:00:01 字数 121 浏览 1 评论 0原文

我正在寻找一种方法,将整个数据负载添加到核心数据,同时保持小活动指示器在 UI 上旋转。我尝试在另一个线程上添加数据,但自从了解到核心数据不是线程安全的,并且我收到了各种错误。有人能建议另一种方法吗?

提前致谢。

I'm looking for a way to add a whole load of data to core data while keeping the little activity indicator spinning on the UI. I tried adding the data on another thread but since learned that core data is not thread safe, and I get all kinds of errors. Can anyone suggest another approach to this?

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

半枫 2024-11-06 10:00:01

Core Data 不是线程安全的,但这只是意味着您必须适当地编码,而不是完全避免它们。为了使您的 UI 保持响应/最新,您需要使用线程。

Apple 关于该主题的文档位于此处这篇博文是关于在 Core Data 中使用多线程以及涉及的一些陷阱的精彩演练。

Core Data is not thread-safe, but that just means you have to code appropriately, rather avoiding them entirely. To keep your UI responsive/up-to-date, you'll need to use threads.

Apple's documentation on the subject is here, and this blog post is an excellent walk-through of using multiple threads with Core Data, and some of the pitfalls involved.

初见你 2024-11-06 10:00:01

您需要为每个线程使用单独的托管对象上下文。您需要做一些额外的工作才能将其他上下文的更改应用于主线程的上下文:请参阅 与核心数据的并发 进行完整讨论。

You need to use a separate managed object context for each thread. There's some additional work you need to do to make changes from other contexts available to your main thread's context: see Concurrency with Core Data for a full discussion.

风和你 2024-11-06 10:00:01

最有用的示例是从 iOS 示例代码下载核心数据 XML。如果您没有访问权限,请告诉我,我将在这里写下它的主要结构。
从 UIviewController 到 nsoperation 委托有一个复杂的自定义委托技术,这对于开始立即向用户显示内容并显示同步进度非常重要。
在 AppStore 中,您可以看到我的“snow IXC”应用程序,您可以在其中看到此技术的实现,用于在 UIviewController 中向用户指示进度。它可以免费下载。

Most useful example is a core data XML downloading from iOS sample code. If u don't have access, please let me know and I will write here is a main structure of it.
There is a complex custom delegate techniques from u UIviewController to nsoperation delegate, this is important for u to start showing content immediately to user and show a progress of sync.
In AppStore u can see my "snow IXC" app, where u can see this techniques implemented for indicate user in their UIviewController about progress. It's free for downloading.

意中人 2024-11-06 10:00:01

这就是我避免使用加载指示器的后台线程的方法(我使用 DSActivityView 但这应该与其他实现一起使用):

在您的代码中,当您要显示指示器时,首先运行所有代码以显示指示器。之后,代码有一个单独的方法调用来完成所有加载工作。使用以下方法调用它:

[self performSelector:@selector(loadMethodName) withObject:nil afterDelay:0.0];

通常应用程序将直接进入加载代码,而无需等待显示指示器视图。通过这种方式调用它,它将首先完成指示器的显示,然后再进入加载代码。

This is how I avoid background threads with a loading indicator (I use DSActivityView but this should work with other implementations):

In your code when you are going to be displaying the indicator run all the code to show the indicator first. After that code have a separate method call to do all the loading work. Call it by using the method:

[self performSelector:@selector(loadMethodName) withObject:nil afterDelay:0.0];

Normally the app will go straight into the loading code without waiting to show the indicator view. By calling it this way it will first finish displaying the indicator before it moves into the loading code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文