每当我滚动我的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
有什么想法吗?
答案 0 :(得分:4)
我猜是当您尝试访问必须取消分配的vaultsPath
的值时,应用程序崩溃了。由于表视图行数基于数组中的元素数,因此如果没有任何元素,则不会调用返回单元格的方法。
尽量保留分配给vaultsPath
的值,不要忘记稍后再发布。