gpt4 book ai didi

iphone - -[CFString长度] : message sent to deallocated instance 0x3881940 when i scroll to near the bottom of a table on iphone

转载 作者:行者123 更新时间:2023-12-03 20:16:59 26 4
gpt4 key购买 nike

我在调试我正在尝试编写的 iPhone 应用程序时遇到问题,这让我陷入困境。

该应用程序从网站获取 XML 文档,将其解析为数组,然后将其显示在 TableView 中。我将解析器放在一个单独的文件中。 RootViewController 中的 ViewDidLoad 向其发送一个 url,解析器开始工作,然后返回一个 NSMutableArray。

当我运行该应用程序时,它可以很好地处理小型 XML 文件(5 个条目左右,以及 1-3 个部分),但是当我使用较大的 XML 文件(20+ 行,超过 12 个部分)时,我收到错误“-[CFString length]:当我滚动到表格 View 底部附近时,消息发送到已释放的实例 0x3881940",准确地说,就像最后一个部分标题即将出现在屏幕上的可视区域一样。

如果我在此方法中返回静态字符串而不是数组中的对象,它不会崩溃,但我可以使用 NSLog 调用该数组,并且它返回标题没有问题。

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)indexPath {
return [[returnedEvents objectAtIndex:indexPath ] objectAtIndex:0];
}

returnedEvents 数组在 -(void) dealloc {} 之前不会被释放

我已经阅读了这里的其他一些帖子,以及一些有关调试的指南,但到目前为止我还找不到任何能够帮助我的东西,我非常乐意在这里发布一些代码等等信息,我只是不知道从哪里开始。

预先感谢任何愿意帮助我的人。

** 更新

这是单元格 View 代码。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

// Configure the cell.
[[cell detailTextLabel] setText:[[[returnedEvents objectAtIndex:indexPath.section] objectAtIndex:indexPath.row + 1] objectForKey:@"Summary"]];
[[cell textLabel] setText:[[[returnedEvents objectAtIndex:indexPath.section] objectAtIndex:indexPath.row + 1] objectForKey:@"title"]];

return cell;
}

*另一个更新

这是程序崩溃时调试器中出现的内容。通过一些调试教程,我了解到这是堆栈跟踪,如果看起来错误,请告诉我。

#0  0x01be33a7 in ___forwarding___
#1 0x01bbf6c2 in __forwarding_prep_0___
#2 0x00066f13 in -[UITableView(UITableViewInternal) _delegateWantsHeaderForSection:]
#3 0x00069fe2 in -[UITableView(_UITableViewPrivate) _updateVisibleHeadersAndFootersNow]
#4 0x000727e4 in -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow]
#5 0x00069953 in -[UITableView layoutSubviews]
#6 0x02f482b0 in -[CALayer layoutSublayers]
#7 0x02f4806f in CALayerLayoutIfNeeded
#8 0x02f478c6 in CA::Context::commit_transaction
#9 0x02f4753a in CA::Transaction::commit
#10 0x02f4f838 in CA::Transaction::observer_callback
#11 0x01bbb252 in __CFRunLoopDoObservers
#12 0x01bba65f in CFRunLoopRunSpecific
#13 0x01bb9c48 in CFRunLoopRunInMode
#14 0x01d6078d in GSEventRunModal
#15 0x01d60852 in GSEventRun
#16 0x00023003 in UIApplicationMain
#17 0x00002a20 in main at main.m:14

这是我用来获取数组的代码:

NSURL *XMLURLPath = [[NSURL alloc] initWithString:@"http://www.localendar.com.au/events/database_xml.php?day=2010-05-01&endday=2010-05-30"];
returnedEvents = [[NSMutableArray alloc] initWithArray:[localoXMLParser parseXMLDataWithURL:XMLURLPath]];
[XMLURLPath release];

也许这是不好的做法?该数组有几层深,应用程序是否可能以某种方式释放数组中的某些对象?

最佳答案

看不出代码有任何问题,但我们可以根据您提供的信息确定以下内容。

该错误表明代码在某处失败,因为长度请求被发送到已发布的字符串(拥有堆栈跟踪会有所帮助)。

它与 ~5 一起工作的事实看起来可能与滚动时单元格出列有关。

当您迭代数组并访问所有成员时,我认为这是在 cellForRowAtIndexPath 中,并且您在滚动时记录文本?如果是这样,那么数组也没有问题。

这可能与indexPath.row + 1有关吗?您是否有一个额外的单元格用于存储其他数据?

关于iphone - -[CFString长度] : message sent to deallocated instance 0x3881940 when i scroll to near the bottom of a table on iphone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2711276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com