2

请参阅下面的更新。

我正在编写一个调整并且正在使用 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 并且我使用假数据(测试名称),则可以正常生成表。当我打印数据源时,其中只有两个项目。

IRC 上的 Ryan Petrich 似乎暗示我做的一切都完全错误,但在那之后并没有太大帮助。也许我正在错误地解决这个问题?

代码:http
://pastebin.ca/2457626 存储库:https ://github.com/twodayslate/ListLauncher

编辑/更新! dataSource 给我带来了问题。它没有获取相同数量的应用程序,因此我收到了索引错误等。我有 200 多个应用程序,但 dataSource 只获取 2 个
。以下代码没有错误,但只显示 2 个项目: http: //pastebin.ca/2458961

编辑! 我改变了它,所以我只使用 ALApplicationList。我能够列出所有应用程序。但是,当我尝试滚动表格时,它会崩溃。排序和创建列表真的很慢,所以我相信这可能会导致问题。我不是 obj-c 的专家,所以我确信有比我正在做的更好的方法。http://pastebin.ca/2459318

4

2 回答 2

4

你的问题是双重的。首先,UITableView期望收到包含行和节的索引路径,而您只提供了一行。其次,您不能期望未经检查的数组访问 100% 成功,因此边界检查您可能使用的任何访问调用。在代码中的 iVar 分配中使用一些保留也没有什么坏处,除非您不需要保留对它的引用(但看起来确实如此)。

于 2013-10-02T00:09:10.547 回答
0

我找到了 ALDataSource 的替代解决方案。我对 ALApplicationList.applications 进行了排序。问题是排序的 NSArray 的实例会不断消失。所以我做了[保留值],一切正常!重新初始化排序的值太慢了,会导致设备崩溃。

这是成功列出所有应用程序的工作代码:http: //pastebin.ca/2459778

于 2013-09-29T20:56:07.633 回答