uitableview数组内容丢失

时间:2012-05-12 19:11:20

标签: objective-c arrays uitableview

我有一个数组,在页面加载时有200个对象我将这些(可变副本)复制到名为filteredarray的临时数组,然后我在uitableview中显示。这一切都很好:)

然后我有一个段选择器,当被选中时,应该使用predictate和filteredarray过滤我的原始数组,现在将再次满足预测标准的对象的内容,我可以看到它工作正常:)< / p>

然后我尝试重新加载我的表视图(再次使用filteredarray),当我单步执行似乎对filterarray中的前几个对象工作正常但是如果那是正确的单词,那么filteredarray似乎被“清空”,并且我的代码表开始刷新后崩溃。我确定它一定是内存问题。我对目标c很新,所以任何帮助都会非常感激。我在下面列出了一些代码

- (void)viewDidLoad
{
[super viewDidLoad];    
appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
filteredArray = [appDelegate.originalArray mutableCopy];    
}



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

static NSString *cellidentifier = @"customcell";
customcell *cell = (customcell *)[tableView dequeueReusableCellWithIdentifier:
                                  cellidentifier];
array_details *arrayObj = [filteredArray objectAtIndex:indexPath.row];

// UITableViewCell cell needs creating for this UITableView row.
if (cell == nil)
{
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"customcell" owner:self options:nil];

    for (id currentObject in topLevelObjects) {
        if ([currentObject isKindOfClass:[customcell class]]) {
            cell = (customcell *) currentObject;
            break;
        }
    }
}


    cell.line1.text = arrayObj.line1;
    cell.line2.text = arrayObj.line2;
return cell;
}


-(IBAction)change_segment:(id)sender;{
if(segmentcontrol.selectedSegmentIndex == 2){
    filteredArray = [appDelegate.originalArray mutableCopy];      
    NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"selected == YES"];
    filteredArray = [filteredArray filteredArrayUsingPredicate:testForTrue]; 
}   

[my_table reloadData];  // its when i do this that the array filtered array seems to somehow get "emptied"

并且我的filteredarray在my.h文件中声明为可移动数组

NSMutableArray *filteredArray;

2 个答案:

答案 0 :(得分:1)

由于你有一个NSMutableArray,我建议使用filterUsingPredicate:而不是filteredArrayUsingPredicate:。您开始使用的已过滤数组是保留的,因为您是通过副本获得的,但是在change_segment:方法中替换它的那个不是。

(我怀疑这是问题,但崩溃及其相关异常的详细信息会使诊断变得更容易。)

答案 1 :(得分:0)

保留你的阵列。在-dealloc中释放它。

filteredArray = [appDelegate.originalArray mutableCopy] retain];