NSFetchedResultsControllerCar(NSManagedObject 的子类,匹配 NSFetchedResultsController 的谓词)NSFetchedResultsControllerDelegate 检测到模型更改,但问题是模型已更新,我需要 TableView 来匹配它。NSFetchedResultsControllerDelegate 检测模型更改,我可以使用委托(delegate)方法进行更新。引用:https://developer.apple.com/documentation/coredata/nsfetchedresultscontrollerdelegate
let fetchRequest : NSFetchRequest<Car> = Car.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "color = %@", argumentArray: ["green"])
let orderIDSortDescriptor = NSSortDescriptor(keyPath: \Car.price, ascending: true)
fetchRequest.sortDescriptors = [orderIDSortDescriptor]
fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest,
managedObjectContext: context,
sectionNameKeyPath: nil,
cacheName: nil)
override func tableView(_ tableView: UITableView,
editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
let newCarIndex = fetchedResultsController?.fetchedObjects?.count ?? 0
let editingStyle : UITableViewCellEditingStyle
switch indexPath.row {
case newCarIndex:
editingStyle = .insert
default:
break
}
return editingStyle
}
override func tableView(_ tableView: UITableView,
commit editingStyle: UITableViewCellEditingStyle,
forRowAt indexPath: IndexPath) {
switch editingStyle {
case .insert:
createGreenCar(at: indexPath) //Creating a new Car with color = Green
tableView.insertRows(at: [indexPath], with: .automatic) //This causes the app to crash
default:
break
}
}
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:部分 1 中的行数无效。更新 (1) 后现有部分中包含的行数必须等于更新前该部分中包含的行数 (1),加上或减去从该部分插入或删除的行数(插入 1,删除 0),加上或减去移入或移出该部分的行数( 0 人搬入,0 人搬出)。'
最佳答案
感谢@Jake 和@pbasdf,他们的建议帮助我确定并纠正了问题。
我的回答是为了完整性。
我的 TableView 中有多个部分,我将行插入到错误的部分。因此,当模型发生变化时,相关部分中的 TableView 行数没有发生变化。
我觉得最好将结果转换成一个数组并使用该数组作为数据源而不是 NSFetchedResultsController 来进行用户驱动的更新。
当用户插入/删除/移动行时,UITableViewDataSource 方法被调用:
tableView(_:commit:forRowAt:) 将被调用tableView(_:moveRowAt:to:) 将被调用更新核心数据会导致调用NSFetchedResultsControllerDelegate
controller(_:didChange:at:for:newIndexPath:) 中执行以下操作:
controllerDidChangeContent(_:) 调用 tableView.reloadData() 在延迟 0.5 秒之后。当用户在 iOS 11.2 上移动行时(使用 NSFetchedResultsController)我确实遇到了以下警告:
UITableView internal inconsistency: _visibleRows and _visibleCells must be of same length. _visibleRows
我不知道如何解决它,所以现在坚持使用数组实现。
关于ios - NSFetchedResultsController - 用户驱动的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49070451/
如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
假设我有一个FireNinja我的数据库中的对象,使用单表继承存储。后来才知道他真的是WaterNinja.将他更改为不同的子类的最干净的方法是什么?更好的是,我很想创建一个新的WaterNinja对象并替换旧的FireNinja在数据库中,保留ID。编辑我知道如何创建新的WaterNinja来self现有FireNinja的对象,我也知道我可以删除旧的并保存新的。我想做的是改变现有项目的类别。我是通过创建一个新对象并执行一些ActiveRecord魔法来替换行,还是通过对对象本身做一些疯狂的事情,或者甚至通过删除它并使用相同的ID重新插入来做到这一点,这是问题的一部分。
我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。
我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道rubyonrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim