我进行了大量搜索,但没有找到似乎可以解决我遇到的问题的答案。
我有一个 UITableViewController。在 viewDidLoad 方法中,我从数据库加载对象,然后调用 reloadData。
现在一般来说这工作正常。但是,现在我正在实现排序,它会持续存在,以便在下一次应用程序启动时使用相同的排序算法。请注意,在所有情况下,支持该部分的数组的大小在排序后都是相同的。
如果我使用默认排序方法,即使它运行相同的排序 > 调用委托(delegate) > reloadTable 代码路径,我也不会崩溃。但是,如果我使用使用相同代码路径的替代排序方法,我会看到 TableView 要求行数,并获得正确的数字,但随后出现此异常。只有对象按不同的顺序排序,所以这对我来说没有意义。
还需要注意的是,如果我在显示表格后对对象(使用相同的代码路径)进行排序,它会正常工作。
这对我来说毫无意义,几乎看起来像是一个 UITableView 错误,但我希望这是我可以修复的问题。
我的应用是开源的,所以我可以直接链接到相关文件:
https://github.com/einsteinx2/iSub/blob/weird_crash/Classes/UI/Reusable/ItemViewController.swift https://github.com/einsteinx2/iSub/blob/weird_crash/Classes/UI/Reusable/ItemViewModel.swift
最相关的方法是 ItemViewModel.sortAll() 和 ItemViewController.itemsChanged(viewModel: ItemViewModel)
我已经想不出如何调试它了。这毫无意义。
我试过的一些试错法:
似乎没有什么不同。我完全困惑这怎么可能。如果有人对我如何继续调试它或如何可能有任何想法,我会洗耳恭听。谢谢。
编辑:为了让事情变得更加困惑,我同样坚持对使用相同 ItemViewController 的相册进行排序,但是返回到之前排序的相册不会导致崩溃,即使它应该做完全相同的事情并运行相同的代码路径。
最佳答案
哇,我终于想通了并谈论边缘案例!
原来崩溃与表部分索引(右侧的字母)有关,而不是实际的数据加载或排序。
未按名称排序时,我使用的是 unicode 项目符号 •。当您实时排序时,这会以某种方式起作用,但是 UITableView 中存在一些错误,导致当您使用该数据加载表时,部分索引的内部数组为空。我改用黑色圆圈字符 ● 现在它不再崩溃了。
我认为这必须是我在 8 年的 iOS 编码中完成的最多调查工作的最小变化。
希望这对将来的某个随机的人有所帮助。我会向 Apple 报告一个错误,尽管它可能不是高优先级的,所以谁知道他们是否/何时会修复它。
关于ios - 异常的 UITableView 崩溃 -[__NSArrayM objectAtIndex :]: index 0 beyond bounds for empty array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43245834/
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd
在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee
这里有一个很好的答案解释了如何在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”结果的
我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手
我几天前在我的rubyonrails2.3.2上安装了Sphinx和Thinking-Sphinx,基本搜索效果很好。这意味着,没有任何条件。现在,我想用一些条件过滤搜索。我有公告模型,索引如下所示:define_indexdoindexestitle,:as=>:title,:sortable=>trueindexesdescription,:as=>:description,:sortable=>trueend也许我错了,但我注意到只有当我将:sortable=>true语法添加到这些属性时,我才能将它们用作搜索条件。否则它找不到任何东西。现在,我还在使用acts_as_tag