滚动时UITableView崩溃

时间:2011-07-24 14:43:15

标签: iphone objective-c uitableview

每当我滚动我的UITableView时,它会查看一个数组以找出要填充下一个单元格的内容,但是数组是空的,导致崩溃,并且似乎已经以某种方式释放。这是我的代码:

·H

@interface HomeViewController : UITableViewController {

    NSArray *vaults;

}


@property (retain) NSArray *vaults;

@end

的.m

#import "HomeViewController.h"

NSString *vaultsPath;

@implementation HomeViewController

@synthesize vaults;

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    vaultsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Vaults"];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    self.vaults = [fileManager contentsOfDirectoryAtPath:vaultsPath error:nil];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.vaults count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

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

    NSString *dictionaryPath = [NSString stringWithFormat:@"%@/%@",
                                vaultsPath,
                                [self.vaults objectAtIndex:indexPath.row]]; //Crashes at this line, with the self.vaults array now empty.
    NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:dictionaryPath];
    cell = [AHCellCreation createCellWithDictionary:dictionary Cell:cell];

    return cell;
}


- (void)dealloc
{
    [super dealloc];
    [self.vaults release];
}

@end

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

我猜是当您尝试访问必须取消分配的vaultsPath的值时,应用程序崩溃了。由于表视图行数基于数组中的元素数,因此如果没有任何元素,则不会调用返回单元格的方法。
尽量保留分配给vaultsPath的值,不要忘记稍后再发布。