4

我有一个 UITableView,当滚动到远弹包时。这也意味着用户可以拖动表格,使其只有一半是可见的,而主视图的另一半是白色的。这会在我的应用程序中导致一些奇怪的行为。我在 AppDelegate 中创建了一个数组。在 RootViewController 的 viewDidLoad 中,我获得了对 AppDelegate 的引用并保留它直到应用程序关闭。在 RootViewController 的 cellForRowAtIndexPath 中,我引用 AppDelegate 实例的数组来获取将填充单元标签的对象。在用户如上所述滚动之前,它工作正常。一旦发生这种情况,就可以在调试器中看到对象 7,例如数组中的对象 7 已变成 UICachedDeviceRGBColor。我不知道为什么会这样。该数组仅在 AppDelegate 中在应用创建时分配一次。

据我所知,我必须首先单击表格中的一行。新视图被推送,其中也有一个 UITableView。在第二个视图的 cellForRowAtIndexPath 中,我检查了 delegate.array,因为第二个视图也有对数组的引用。我立即看到数组中的对象 2 是:

2 : UIDeviceRGBColorSpace 1 1 1 1

这是不应该的。然后,当我单击返回并再次显示主表时,请执行上述滚动技术以获取怪异。我滚动表格刚好足以在 cellForRowAtIndexPath 中命中我的断点,然后看到数组已被更改。对象 2 是正确的类型,但现在对象 7 不是。

问题是,如果我尝试访问对象 7 并调用我要转换的类型的属性,那么 UICachedDeviceRGBColor 上当然不存在该属性。这是一个“Inavlid”,因此由于内存访问错误,我得到了“EXC_BAD_INSTRUCTION”。

在这种特定条件下,是什么导致数组发生这种变化?或者至少,我该如何防范呢?

4

2 回答 2

4

这是在设备上,但看起来好像我已经弄清楚了。

在 RootViewController 的 didSelectRowAtIndexPath 中,我从 delegate.thearray 中获取了一个对象。就在第二个视图被推送之前,我释放了这个对象。这是错误的,因为我没有分配对象。删除了那条线,数组中不再有怪异之处。现在似乎一切正常。

于 2009-03-30T00:20:43.560 回答
-1

这是在模拟器还是设备上?

当我使用鼠标上的滚轮滚动表格时,我发现只有在模拟器上才会发生这样的事情。模拟器无法判断您何时释放滚轮,因此不知道何时弹回。然后,当我触摸它时,它会弹回并在与我触摸不同的项目上注册我的触摸。这在设备上没有发生。当您使用滚动条在设备上滚动时,它会在您释放时立即弹回,因此您无法在过度滚动时触摸项目。

于 2009-03-29T23:58:56.827 回答