- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个 UIViewController
s 在标签栏中
在 TabBar
之一中我正在使用 AFNetworking
进行 api 调用这个 api 调用将数据保存在 CoreData
.
这是我的代码
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
for (int i = 0; i < cartList.count; i++)
{
NSDictionary *dict = [cartList objectAtIndex:i];
NSFetchRequest *request = [Orders fetchRequest];
request.predicate = [NSPredicate predicateWithFormat:@"orderId = %@", [dict objectForKey:kiD]];
NSError *error = nil;
NSArray *itemsList = context executeFetchRequest:request error:&error];
if (itemsList.count == 0)
{
Orders *order = [NSEntityDescription insertNewObjectForEntityForName:@"Orders" inManagedObjectContext:appDel.persistentContainer.viewContext];
[order updateWithDictionary:dict];
order.isNew = NO;
}
else
{
Orders *order = [itemsList objectAtIndex:0];
[order updateWithDictionary:dict];
order.isNew = NO;
}
}
dispatch_async(dispatch_get_main_queue(), ^{
[appDel saveContext];
[self refreshValues:NO];
});
});
VIewController
我正在做类似的事情。如果我非常快地切换选项卡 Controller ,应用程序会崩溃
[appDel saveContext];
viewContext
被其他
UIviewController
使用在后台线程中。
[appDel.persistentContainer performBackgroundTask:^(NSManagedObjectContext * _Nonnull context)
{
NSFetchRequest *request = [Categories fetchRequest];
NSBatchDeleteRequest *deleteReq = [[NSBatchDeleteRequest alloc] initWithFetchRequest:request];
NSError *deleteError = nil;
[appDel.persistentContainer.viewContext executeRequest:deleteReq error:&deleteError];
for (int i = 0; i < dataArr.count; i++)
{
Categories *category = [NSEntityDescription insertNewObjectForEntityForName:@"Categories" inManagedObjectContext:appDel.persistentContainer.viewContext];
[category updateWithDictionary:[dataArr objectAtIndex:i]];
}
@try {
NSError *error = nil;
[context save:(&error)];
} @catch (NSException *exception)
{
}
[self getCategoryItems];
}];
最佳答案
核心数据不是线程安全的,也不是为了阅读而写作。如果您违反此规则,核心数据可能会以意想不到的方式失败。因此,即使它看起来有效,您也会发现核心数据突然无缘无故崩溃。换句话说,从错误的线程访问核心数据是未定义的。
有几种可能的解决方案:
1) 只使用主线程读写核心数据。对于不进行大量数据导入或导出且数据集相对较小的简单应用程序,这是一个不错的解决方案。
2) 换行NSPersistentContainer
的performBackgroundTask
在操作队列中,仅通过该方法写入核心数据,从不写入 viewContext
.当您使用 performBackgroundTask
该方法为您提供了上下文。您应该使用上下文来获取您需要的任何对象,修改它们,保存上下文,然后丢弃上下文和对象。
如果您尝试同时使用 performBackgroundTask
并直接写信给viewContext
您可能会遇到写入冲突并丢失数据。
关于ios - 在多个线程上访问 ViewContext 导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45161590/
有后台上下文来执行写操作是很常见的。 // Set automaticallyMergesChangesFromParent to true persistentContainer.viewConte
是否可以从类库访问ViewContext?我需要获取当前 View 和 Controller 操作的名称。我在我的类库项目中添加了 System.Web.dll 和 System.Web.Mvc 但仍
我有两个 UIViewController s 在标签栏中 在 TabBar 之一中我正在使用 AFNetworking 进行 api 调用这个 api 调用将数据保存在 CoreData . 这是我
这是故事。为了能够将格式良好的 Bootstrap 控件放入我的 MVC 表单中,我正在构建一个 HtmlHelper使用单个命令生成以下结构的扩展方法: @Html.LabelFor(m
我想创建一个可以从 View 调用的静态帮助器方法。 辅助方法是否可以访问当前的 ViewContext 而无需将 ViewContext 作为参数显式传递给方法? 类似于 HttpContext.C
我使用 NSPersistanceContainer 创建了一个应用程序来保存学生的详细信息,当我从 JSON 获取数据并保存到数据库时,那时我得到的获取结果计数 > 0。如果我重新启动应用程序获取结
我正在使用 NSPersistentContainer 来创建我的核心数据堆栈。 documentation说我们应该使用它的 viewContext 属性来获取主要的 NSManagedObject
stack overflow 中已经有类似的问题,但它对我不起作用。 在我的应用程序中有一个用例,我必须观察数据库更改才能执行某些操作。为了接收更新,我订阅了 NSManagedObjectConte
我有一个无法解决的场景: 我正在尝试为 mvc 创建自己的自定义授权属性。我想添加的主要功能是能够更改用户不处于某个角色时重定向的位置。我不介意如果他们没有经过身份验证,系统会将它们发送回登录页面,但
在我的旧 ASP.NET 网络应用程序中,我编写了一个 HTML 帮助程序,以通过访问 ViewContext.Controller 来访问执行当前 View 的 Controller 的上下文: p
以我敏锐的眼光,我有: 在打印页面时正确应用该样式表。 但是,在某些情况下,我会使用类似以下内容将 View 呈现为 HTML 字符串: var razorViewEngine = new Razo
我正在为我的应用程序添加核心数据。我使用的代码与我在具有完全相同架构的测试应用程序中使用的代码完全相同,但我得到了不同的结果。 var context: NSManagedObjectContext!
我遇到一个奇怪的问题,ViewContext.RouteData.Values["action"] 在我的登台服务器上为空,但在我的开发机器(asp.net 开发服务器)上工作正常。 代码很简单: p
是否可以在不知道 ViewContext 的情况下从操作中获取 URL(例如,在 Controller 中)?像这样的: LinkBuilder.BuildUrlFromExpression(View
我正在为 ASP.NET MVC 4 (RC) View 使用自定义 DisplayModes 以允许自定义 View 内容。 我对这个仅限移动应用程序的规则非常简单,并根据用户的内部配置文件/ se
我有一个这样的辅助方法: @helper Message(Func markup) { @markup.DynamicInvoke(this.Vie
我在我的应用程序中只使用了 Core Data 的主上下文。我知道 Main Context 只能在主线程中运行。但是,当我从后台线程内部更新主上下文时,我不会遇到任何崩溃。 //Cloudk
在我的应用程序中,我有一个 NSFetchedResultsController 用于在 UITableView 中加载核心数据对象。与此 FRC 关联的提取请求使用可用于 NSPersistentC
是否可以找出当前ViewContext的VirtualPath例如 ~/Views/Company/Create.aspx 最佳答案 我认为这就是您所追求的: ((WebFormView) ViewC
我想从无法访问 ViewContext 的实用程序类创建一条路由。 这可能吗?似乎没有任何等同于 ViewContext.Current 我已经尝试在 Routing 和 HttpContext 的所
我是一名优秀的程序员,十分优秀!