请参阅下面的更新。
我正在编写调整并正在使用AppList。我陷入了困境,并在所有已安装的应用程序中创建了一个表。我正在尝试使用dataSource来获取信息(显示标识符等)。问题是如果定义了dataSource ......我收到以下错误:
SpringBoard[1622] <Warning>: *** Assertion failure in -[NSIndexPath row], /SourceCache/UIKit/UIKit-2380.17/UITableViewSupport.m:2680
SpringBoard[1622] <Warning>: ***** AltKeyboard Uncaught Exception: Invalid index path for use with UITableView. Index paths passed to table view must contain exactly two indices specifying the section and row. Please use the category on NSIndexPath in UITableView.h if possible. *****
或
SpringBoard[1890] <Warning>: ***** AltKeyboard Uncaught Exception: *** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1] *****
SpringBoard[1890] <Error>: *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]'
*** First throw call stack:
如果未定义dataSource并且我使用假数据(测试名称),则表格生成正常。当我打印dataSource时,其中只有两个项目。
IRC的Ryan Petrich似乎暗示我做的一切都完全错了,但在此之后并没有多少帮助。也许我会错误地解决这个问题?代码:http://pastebin.ca/2457626
存储库:https://github.com/twodayslate/ListLauncher
修改/更新!
dataSource给了我一些问题。它没有获取相同数量的应用程序,因此我得到索引错误等。我有超过200个应用程序,但dataSource只提取2.
以下代码未显示错误,但仅显示2个项目:http://pastebin.ca/2458961
修改<!/强> 我改了它,所以我只使用ALApplicationList。我能够列出所有应用程序。但是,当我尝试滚动表格时,它会崩溃。排序和创建列表非常慢,所以我认为这可能会导致问题。我不是ob-c的亲,所以我确信有比我正在做的更好的方式。 http://pastebin.ca/2459318
答案 0 :(得分:4)
你的问题是双重的。首先,UITableView
期望传递包含行和节的索引路径,其中您只提供了一行。其次,您不能指望未经检查的阵列访问在100%的时间内成功,因此边界检查您可能正在使用的任何访问调用。在代码中使用的iVar分配中使用一些保留也不会有什么坏处,除非你不需要对它进行引用(但它看起来像你那样)。
答案 1 :(得分:0)
我找到了ALDataSource的替代解决方案。我对ALApplicationList.applications进行了排序。问题是排序的NSArray的实例将继续消失。所以我做了[值保留],一切正常!重新初始化已排序的值太慢并且会使设备崩溃。
以下是成功列出所有应用的工作代码:http://pastebin.ca/2459778