- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序可以将数据同步到服务器。过程是:1)将本地数据转换为JSON2) 将本地数据以 HTTP Post 的形式发送到服务器3) 在 2) -0 中处理来自 HTTP Post 的服务器响应,即它是服务器的确认表单,它正在处理它,并保存了一切 OK4) 从服务器对 JSON 进行 HTTP 请求以进行作业更新5)处理这个JSON保存到核心数据
我试过将各个部分放在后台线程上,这样我就可以发布 UI。我一直遇到间歇性问题,我认为这是因为我在后台线程上使用核心数据。
此过程从单击按钮开始,因此为了保持 UI 正常工作,我至少需要在后台线程中执行一些操作。
目前我将初始方法调用发送到后台线程,并在后台处理所有这些,在主线程上使用进度消息更新 UI。
我可以保持原样,但将核心数据部分强制到主线程吗?这甚至是一个好的解决方案吗?将所有内容保留在后台并将核心数据位放回主线程是否可以?
谢谢!
编辑 - 我现在使代码更合理 - VC 现在开始处理后台线程,并通过来自 3 个用于发送和下载数据的类的协议(protocol)调用更新 UI。
每个类都有自己的托管对象上下文对象,但是每个类都使用下面的代码来初始化:
-(NSManagedObjectContext*) managedObjectContext
{
if (!_managedObjectContext)
{
mavisFireChecksAppDelegate *appDelegate = (mavisFireChecksAppDelegate *) [[UIApplication sharedApplication] delegate];
_managedObjectContext=appDelegate.managedObjectContext;
}
return _managedObjectContext;
}
我应该改变这个吗?这些类是在后台线程上创建的,尽管它们保留在该线程上,但 appdeleegate.managedObjectContext 是在应用程序加载时创建的,因此在主线程上创建。我现在脑子里有这个正确的吗?这 3 个类都应该初始化一个新的 MOC,而不是使用 appDelegate 托管对象上下文,因为它们在后台运行,并且应用程序委托(delegate)是在主线程上创建的?
在没有实际更改托管对象上下文初始化而不是类的情况下,它仍然每 50-100 次调用左右出错一次。在后台对象中使用 appldelegate.managedobject 可能是问题的原因
编辑****
在下面的线程中接受了解决方案,但对于阅读本文的任何人来说还有一些有用的信息:
我想补充一点,以防其他人读到它。我确实将所有 CD 调用包装在 perform... block 中,但引入了一个新错误,因为我没有在 2 个单独的 MOC 上正确合并更改。丹尼尔提供的链接 -robots.thoughtbot.com/core-data
,非常棒,让我看到了我的错误。还有一个 CD 堆栈,您可以从本文底部链接的 git hub 中提取它。
最佳答案
从后台线程调用Core Data并不意味着你已经实现了并发。考虑以下创建后台线程上下文的代码:
- (NSManagedObjectContext *)createBackgroundContextWithStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator {
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[context setPersistentStoreCoordinator:coordinator];
context.undoManager = nil;//if you don't need an undo manager always do this for performance boosts
return context;
}
您会看到上下文具有 NSPrivateQueueConcurrencyType
的并发类型,而您的 UI 内容通常具有 NSMainQueueConcurrencyType
现在您已经了解了背景上下文,您应该了解 performBlock:(异步)和 performBlockAndWait:(同步)调用以与 Core Data 进行交易。所以你的导入可能看起来像这样:
- (void)importStuff:(NSArray *)stuffToImport
usingContext:(NSManagedObjectContext *)context
andPerformBlock:(void (^)(BOOL madeChanges))completionBlock {
[context performBlock:^{
/**
* do some import stuff
*/
BOOL madeChanges = [context hasChanges];
[context save:nil];
if (completionBlock) {
completionBlock(madeChanges);
}
}];
}
您将在其中调用导入方法,如下所示:
NSArray *stuff = //whatever you fetched from server;
NSManagedObjectContext *context = //background context;
[importer importStuff:stuff
usingContext:context
andPerformBlock:^(BOOL madeChanges){
if (madeChanges){
//reload UI
}
}];
请记住,托管对象不是线程安全的。您应该始终确保在上下文 performBlock 或 performBlockAndWait 中执行任何更新、访问或插入。
通常我发现 block 对于导入比委托(delegate)方法更有用:)
关于ios - 处理HTTP Post,然后通过HTTP下载,然后保存到核心数据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26059030/
这个问题已经有答案了: How to do case insensitive string comparison? (23 个回答) 已关闭 3 年前。 用户在我的输入栏中写入“足球”,然后执行第 6
啊,不习惯 javascript 中的字符串。 character_id= + id + correct= + correctOrIncorrect 这就是我需要制作成字符串的内容。如果您无法猜测字符
$(function() { var base_price = 0; CalculatePrice(); $(".math1").on('change', function(e) { Calc
我找不到任何文章回答问题:将Spinnaker部署到Spinnaker将管理的同一Kubernetes集群是否安全/正确?我主要是指生产,HA部署。 最佳答案 我认为Spinnaker和Kuberne
我正在使用MSVC在Windows上从源代码(官方源代码发布,而不是从仓库中)构建Qt5(Qt 5.15.0)。 我正在设置环境。变量,依赖项等,然后运行具有1600万个选项的configure,最后
我需要打印一个包含重复单词的数组。我的数组已经可以工作,但我不知道如何正确计算单词数。我已经知道,当我的索引计数器 (i) 为 49 时,并且当 (i) 想要计数到 50 时,我会收到错误,但我不知道
我正在遵循一个指南,该指南允许 Google map 屏幕根据屏幕尺寸禁用滚动。我唯一挣扎的部分是编写一个代码,当我手动调整屏幕大小时动态更改 True/False 值。 这是我按照说明操作的网站,但
我有一个类“FileButton”。它的目的是将文件链接到 JButton,FileButton 继承自 JButton。子类继承自此以使用链接到按钮的文件做有用的事情。 JingleCardButt
我的 friend 数组只返回一个数字而不是所有数字。 ($myfriends = 3) 应该是…… ($myfriends = 3 5 7 8 9 12). 如果我让它进入 while 循环……整个
这个问题在这里已经有了答案: Is there a workaround to make CSS classes with names that start with numbers valid?
我正在制作一个 JavaScript 函数,当调整窗口大小时,它会自动将 div 的大小调整为与窗口相同的宽度/高度。 该功能非常基本,但我注意到在调整窗口大小时出现明显的“绘制”滞后。在 JS fi
此问题的基本视觉效果可在 http://sevenx.de/demo/bootstrap-carousel/inc.carousel/tabbed-slider.html 获得。 - 如果你想看一看。
我明白,如果我想从函数返回一个字符串文字或一个数组,我应该将其声明为静态的,这样当被调用的函数被返回时,内容就不会“消亡”。 但我的问题是,当我在函数内部使用 malloc 分配内存时会怎样? 在下面
在 mySQL 数据库中存储 true/false/1/0 值最合适(读取数据消耗最少)的数据字段是什么? 我以前使用过一个字符长的 tinyint,但我不确定它是否是最佳解决方案? 谢谢! 最佳答案
我想一次读取并处理CSV文件第一行中的条目(例如打印)。我假设使用Unix风格的\n换行符,没有条目长度超过255个字符,并且(现在)在EOF之前有一个换行符。这意味着它是fgets()后跟strto
所以,我们都知道 -1 > 2u == true 的 C/C++ 有符号/无符号比较规则,并且我有一种情况,我想有效地实现“正确”比较。 我的问题是,考虑到人们熟悉的尽可能多的架构,哪种方法更有效。显
**摘要:**文章的标题看似自相矛盾。 本文分享自华为云社区《Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序》,作者: Jerry Wang 。 文章的标题看似自相矛盾,然而我在“正
我有一个数据框,看起来像: dataDemo % mutate_each(funs(ifelse(. == '.', REF, as.character(.))), -POS) # POS REF
有人可以帮助我使用 VBScript 重新格式化/正确格式化带分隔符的文本文件吗? 我有一个文本文件 ^分界如下: AGREE^NAME^ADD1^ADD2^ADD3^ADD4^PCODE^BAL^A
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!