0

AppDelegate から画像を取得し、それを ViewController の table.imageView プロパティに設定しています。それは私に NSRangeException を投げています:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray     objectAtIndex:]: index (2) beyond bounds (2)'

配列と行が [array count] でカウントされることを確認しました。非常に混乱。コードは次のとおりです。

#pragma mark - viewWillAppear
- (void)viewWillAppear:(BOOL)animated {

PBAppDelegate *dataObject = (PBAppDelegate *)[[UIApplication sharedApplication] delegate];
NSString *titleRead = dataObject.title;
NSString *descRead = dataObject.desc;
UIImage *imageRead = dataObject.image;


if ([titleRead isEqualToString:@"" ] || [descRead isEqualToString:@""]) {
    // it's nil
} else {
    if (titleRead) {
        [data addObject:[NSArray arrayWithObjects:titleRead, descRead, imageRead, nil]];
        dataObject.title = @"";
        dataObject.desc = @"";
        [tableView reloadData];
    }

    NSUserDefaults *dataDefaults = [NSUserDefaults standardUserDefaults];
    [dataDefaults setObject:[NSArray arrayWithArray:data] forKey:@"dataArrayKey"];
    [dataDefaults synchronize];
}

}

#pragma mark - viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
data = [[NSMutableArray alloc] init];

self.data = [[NSUserDefaults standardUserDefaults] objectForKey:@"dataArrayKey"];
[tableView reloadData];
}

#pragma mark - Table Datasource
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath     *)indexPath {

static NSString *cellIdentifier = @"MyCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
}

cell.textLabel.text = [[data objectAtIndex:indexPath.row] objectAtIndex:0];
cell.detailTextLabel.text = [[data objectAtIndex:indexPath.row] objectAtIndex:1];
cell.imageView.image = [UIImage imageNamed:[[data objectAtIndex:indexPath.row] objectAtIndex:2]];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

return cell;
}
4

2 に答える 2

1

それはおそらくこの行です:

cell.imageView.image = [UIImage imageNamed:[[data objectAtIndex:indexPath.row] objectAtIndex:2]];

コンソール出力は、配列に 2 つの要素があることを示しています。要素は 0 から始まります。objectAtIndex:0 と objectAtIndex:1 にアクセスできます。Two は配列の 3 番目の要素であり、範囲外です。

それがすべて明らかである場合は申し訳ありませんが、簡単に突き刺すだけです...お楽しみください。:)

編集 実際にはimageRead、配列に追加するとnilになるという問題が発生する可能性があります。これにより、配列には 2 つの要素しか含まれなくなります。それを確認したり、画像がない場合は [NSNull null] を使用したりできます...

于 2013-01-19T16:26:04.610 に答える
0

次のようにして、配列に実際に 3 つの要素があることを確認します。

NSArray *array = [data objectAtIndex:indexPath.row];
if ([array count] > 2)
{
 cell.imageView.image = [UIImage imageNamed:[array objectAtIndex:2]];
}
于 2013-01-19T19:44:33.570 に答える