1

カテゴリのリストを取得し、plistを使用してtableViewに表示しています。また、plistを使用して画像の名前を保存し、cell.imageViewに画像を表示しています。これまでのところ正常に機能していますが、新しい画像を追加しようとしている場合カテゴリ画像の追加で問題が発生しています。取得しているエラーは範囲を超えているため、配列に問題があると思います。

- (void)viewDidLoad
{

//Reading data from plist.
self.categoryFile = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Categories"];
if(![[NSFileManager defaultManager] fileExistsAtPath:self.categoryFile])
{
    self.categoryFile = [[NSBundle mainBundle]pathForResource:@"Categories" ofType:@"plist"];
}
self.categoryList = [[NSMutableArray alloc]initWithContentsOfFile:self.categoryFile];

//get list of images from a plist
NSString *imageNames = [[NSBundle mainBundle]pathForResource:@"ImagesNames" ofType:@"plist"];
self.imagesList = [[NSMutableArray alloc]initWithContentsOfFile:imageNames];
[toolbar release];
[self.imagesList release];
[super viewDidLoad];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.categoryList count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if(!cell){
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]autorelease];
}
cell.textLabel.text = [self.categoryList objectAtIndex:indexPath.row];

//ここでエラーが発生します。

cell.imageView.image = [UIImage imageNamed:[self.imagesList objectAtIndex:indexPath.row]];
return cell;
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if(buttonIndex == 1)
{
    UITextField *newCategoryName = [alertView textFieldAtIndex:0];
    NSInteger section = 0;
    NSInteger row = 0;
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section];
    NSString *extraContent = newCategoryName.text;
    [[self categoryList]insertObject:extraContent atIndex:row];
    [self.categoryList writeToFile:self.categoryFile atomically:YES];
    NSArray *indexPathsToInsert = [NSArray arrayWithObject:indexPath];
    [[self tableOfCategories]insertRowsAtIndexPaths:indexPathsToInsert withRowAnimation:UITableViewRowAnimationRight];
    NSLog(@"%@",newCategoryName.text);
}
}
4

1 に答える 1

1

あなたの問題によると、あなたはplistにカテゴリを追加していると思いますが、plistのImageNamesを更新していません。行数については、このようなコードを使用しているためです。

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

上記のコードでは、カテゴリに従って行を増やしているためです。ただし、Categoryのみを増やしているため、imagesListのアイテム数はcategoryListより少なくなっています。

于 2012-07-03T08:04:49.137 に答える