iOS 8 UITableView中的奇怪问题

时间:2014-11-03 12:08:19

标签: ios objective-c uitableview ios8

我在Master-Detail结构中使用自定义UITableView UITableViewCell。表格的单元格可以是文档或文件夹...如果单元格是文档,它会在详细视图中打开文档,但如果是文件夹则会打开下面的其他单元格。 这在iOS 7上完美运行,但在iOS 8中运行,当我点击一个单元格时,我的应用程序冻结,它需要越来越多的内存......最后它崩溃了。 我已经尝试了一切......我已经在任何地方进行了搜索......似乎没有任何效果!

这是我的didSelectRowAtIndexPath:方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"OBJECTS: %lu", (unsigned long)_objects.count);
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    NSDictionary *d=[_objects objectAtIndex:indexPath.row];
    if([d valueForKey:@"Objects"])
    {
        NSArray *ar=[d valueForKey:@"Objects"];
        BOOL isAlreadyInserted=NO;
        for(NSDictionary *dInner in ar )
        {
            NSInteger index=[_objects indexOfObjectIdenticalTo:dInner];
            isAlreadyInserted=(index>0 && index!=NSIntegerMax);
            if(isAlreadyInserted) break;
        }
        if(isAlreadyInserted)
        {
            [self miniMizeThisRows:ar];
        }
        else
        {
            NSUInteger count=indexPath.row+1;
            NSMutableArray *arCells=[NSMutableArray array];
            for(NSDictionary *dInner in ar )
            {
                [arCells addObject:[NSIndexPath indexPathForRow:count inSection:0]];
                [_objects insertObject:dInner atIndex:count++];
            }

            [self addRowsAtIndexPaths:arCells];
        }
    }
    else
    {
        NSDictionary *object = [_objects objectAtIndex:indexPath.row];
        self.detailViewController.detailItem = [object objectForKey:@"name"];
        self.detailViewController.title = [object objectForKey:@"displayedName"];

        if(![cache containsObject:object])
        {
            TableCustomCell *cell = (TableCustomCell*)[tableView cellForRowAtIndexPath:indexPath];
            [cell.marker setHidden:NO];

            [cache addObject:object];
        }
    }
}

在addRowsAtIndexPaths中:我只是做

- (void)addRowsAtIndexPaths:(NSArray*)indexPaths
{
    [self.tableView beginUpdates];
    [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationMiddle];
    [self.tableView endUpdates];
}

有人帮忙???

谢谢。

修改

我发现循环是由我的UITableViewCell sublcass引起的...... 我使用此代码来管理缩进:

- (void)layoutSubviews
{
    [super layoutSubviews];

    float indentPoints = self.indentationLevel * self.indentationWidth;

    self.contentView.frame = CGRectMake(indentPoints,
                                        self.contentView.frame.origin.y,
                                        self.contentView.frame.size.width - indentPoints,
                                        self.contentView.frame.size.height);
}

通过评论这个,应用程序可以工作......但是单元格没有缩进!

1 个答案:

答案 0 :(得分:2)

尝试按'暂停'调试器中的按钮,在此冻结期间,并查看callStack,然后按'继续'按钮,再次'暂停',并寻找电话,他们的女巫是一样的。它看起来像呼叫周期。