- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
@编辑@PangHoMing - 我会再次一步一步地做。首先设置 - 按照您的建议
MagicalRecord.setLoggingLevel(.verbose)
MagicalRecord.setupCoreDataStack(withAutoMigratingSqliteStoreNamed: dataStack)
下一个数据保存方法:
MagicalRecord.save({ (context) in
_ = data(context)
}) { (success, error) in
completion(success,error)
}
我正在使用CoreDataEditor
预览实体。执行完这部分后,一切似乎都很好。
购物车创建闭包(我刚刚删除了负责特定字段的部分以缩短消息)
let createCart: (NSManagedObjectContext) -> () = {context in
let offlineCart = Cart.mr_createEntity(in: context)!
offlineCart.code = "0"
接下来我将取 repo 物车数据以将其返回。也正如您所建议的,不使用特定上下文
let cart: Cart? = Cart.mr_findFirst()
现在让我们将某物添加到我的购物车,这里开始一些有问题的部分
let addEntry: (NSManagedObjectContext) -> () = { context in
if let entry = CartEntry.mr_findFirst(with: NSPredicate(format: "product.code == %@", productCode), in: context) {
entry.quantity = NSNumber.init(value: (entry.quantity?.intValue)! + 1)
} else {
let entry = CartEntry.mr_createEntity(in: context)!
entry.quantity = quantity
entry.product = Product.mr_findFirst(with: NSPredicate(format: "code == %@", productCode), in: context)
entry.code = productCode
entry.cart = Cart.mr_findFirst(in: context)
}
}
正如您所看到的,上面的代码正在尝试查找现有的 CartEntry
如果发现它只是增加数量,如果没有则创建新的 CartEntry
相关于Cart
和Product
。为什么会有in: context
?因为当我忽略它们时,保存不会执行。我收到如下警告:NO CHANGES IN ** saveWithBlock:completion: ** CONTEXT - NOT SAVING
到目前为止,一切似乎都还不错。 CoreDataEditor
显示这样的结构
现在让我们进行删除操作。
尝试 1 - 删除传递给 save 方法的闭包(如上所述)
let removeEntry: (NSManagedObjectContext) -> () = { context in
CartEntry.mr_deleteAll(matching: NSPredicate(format: "product.code == %@", product.code), in: context)
}
self.coreDataManager.saveData(data: removeEntry, completion: { (succes, error) in
completion(succes, error)
})
效果1:竣工区 block 返回success = true, error = nil
执行此操作后,我们立即刷新购物车 let cart: Cart? = Cart.mr_findFirst()
- cart.entries 字段有 2 CartEntry
对象忽略了我刚刚删除了一个这一事实。更重要的是,应用程序崩溃是因为收到的条目(应该删除的条目)没有相关Product
。 CoreDataEditor
仅显示 1 个条目。重新启动应用程序后,购物车再次正确 - 只有 1 个条目,没有我刚刚删除的数据。
尝试 2:让我们忽略in: context
let removeEntry: (NSManagedObjectContext) -> () = { context in
CartEntry.mr_deleteAll(matching: NSPredicate(format: "product.code == %@", product.code))
}
效果2: NO CHANGES IN ** saveWithBlock:completion: ** CONTEXT - NOT SAVING
解决方案
仔细检查您的Delete rules
- 问题是 No Action
而不是Nullify
最佳答案
MagicalRecord.save
正在将数据保存到 defaultContext
MagicalRecord.save({ (context) in
_ = data(context)
}) { (success, error) in
completion(success,error)
}
而你的self.localContext
是mr_root saving
??
快速建议:
使用 MagicalRecord.setupCoreDataStack(withAutoMigrationSqliteStoreNamed: dataStack)
而不是 MagicalRecord.setupCoreDataStack(withStoreNamed: dataStack)
。始终让 MagicalRecord 为您处理自动迁移。
在大多数情况下,我使用 MagicalRecord
的习惯始终坚持使用 defaultContext
。对于您的用例,如果您始终使用 MagicalRecord.save
保存数据(它将数据保存到 defaultContext 中),您确实不需要显式创建
)。然后你可以简单地使用 self.localContext
let cart: Cart? = Cart.mr_findFirst()
随时随地检索您需要的数据。
更新答案
感谢您更新问题@Piotr Gawłowski。
Why there are in: context? Cause when I omit them save is not performing. I've got a warnings like:NO CHANGES IN ** saveWithBlock:completion: ** CONTEXT - NOT SAVING
MagicalRecord.save({(context)..
创建一个新的上下文来执行闭包中的操作,然后它合并回 defaultContext
。正如我提到的之前,如果您没有显式指定上下文,MagicalRecord
将回退到 defaultContext
。因此,如果您没有添加“inContext:”,则发生的情况是您创建的MagicalRecord.save({(context)..
block 内的 defaultContext
中的实体。事实证明,MagicalRecord 的上下文没有发生任何更改。 save({(context).
(我的英语很烂,但我知道你很聪明能理解)
并且,您可以使用mr_findFirstOrCreate
初始化程序
let addEntry: (NSManagedObjectContext) -> () = { context in
let entry = CartEntry.mr_findFirstOrCreate(with: NSPredicate(format: "product.code == %@", productCode), in: context) {
entry.quantity = NSNumber.init(value: (entry.quantity?.intValue)! + 1)
entry.product = Product.mr_findFirst(with: NSPredicate(format: "code == %@", productCode), in: context)
entry.code = productCode
entry.cart = Cart.mr_findFirst(in: context)
}
言归正传,基本上 add
和 fetch
操作都工作正常,对吗?剩下的问题是删除
。首先,尝试2就是我上面提到的上下文问题。
所以让我们关注
Effect 1: Completions block returns success = true, error = nil Right after this operations we're refreshing cart with let cart: Cart? = Cart.mr_findFirst() - cart.entries field got 2 CartEntry objects ignoring fact that I just deleted one. What is more app crashes because received entry (one that supposed to be deleted) do not have related Product. CoreDataEditor shows only 1 entry. After restarting applications cart is once again correct - got only 1 entry, without data I just deleted.
您的delete
调用似乎没问题
应用程序崩溃是您实际上删除了该条目的好兆头
您重新启动了应用程序,只剩下 1 个条目,证明您的删除语句完成了它的工作
(您是否使用CoreDataEditor
仔细检查结果?)
因此我们可以确认所有其他部分都正常工作,唯一的问题似乎是您没有正确处理数据源更改。您使用的是 UITableView
吗?您是否使用 NSFetchedResultsControllerDelegate
扩展您的类并实现委托(delegate)方法?
请告诉我们该部分的代码。 (用于显示数据的 ViewController)。
关于ios - MagicalRecord - 保存后数据错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42980169/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!