0

テーブル ビュー セルを作成するときに、文字列の値を配列から のインスタンスに渡そうとしていますが、値ImageViewerが nil になっています。コードは次のとおりです。

NSString *file = [[NSString alloc] init ];
file = [photoFiles objectAtIndex:indexPath.row];

ImageViewer *imageView  = [[ImageViewer alloc] initWithNibName:@"ImageViewer" bundle:nil];
imageView.fileName = file;
[self.navigationController pushViewController:imageView animated:YES];
[imageView release];

この問題を解決するために私を助けてもらえますか?

4

5 に答える 5

1

ラインをチェック

file = [photoFiles objectAtIndex:indexPath.row];

イメージビューアでファイル名のプロパティを確認して ください

于 2011-05-24T07:03:33.363 に答える
0

imageView.fileName = fileが値を設定している場合はnil、おそらくphotoFiles配列の内容を分析することを検討する必要があります。

この配列のインデックスに値がない可能性がありindexPath.rowます。これは、デバッガーまたはログ出力で確認する必要があります。

NSLog(@"Array contents: %@", [photoFiles description]);

編集

このコードはもっと簡潔に書くことができます。すなわち:

ImageViewer *imageView  = [[ImageViewer alloc] initWithNibName:@"ImageViewer" bundle:nil];
imageView.fileName = [photoFiles objectAtIndex:indexPath.row];
[self.navigationController pushViewController:imageView animated:YES];
[imageView release];

また、 を指さないようにする必要がありますnil NSBundle。つまり、最初の行を次のように変更します。

ImageViewer *imageView  = [[ImageViewer alloc] initWithNibName:@"ImageViewer" bundle:[NSBundle mainBundle]];

ただし、クラス名と Nib 名が同じであるため、この方法でも機能するはずです。

ImageViewer *imageView  = [[ImageViewer alloc] init];

試してみて、何か変わったら教えてください。

于 2011-05-24T07:02:42.800 に答える
0

ここには答えを出すのに十分な情報がありません (デバッガーを使用してステップ実行し、nil 値が返される理由を理解する必要があります)、少なくとも 1 つのメモリ リークがあります。あなたが提示したコードを書き直す方法は次のとおりです。

ImageViewer *imageView  = [[ImageViewer alloc] initWithNibName:@"ImageViewer" bundle:nil];
imageView.fileName = [photoFiles objectAtIndex:indexPath.row];
[self.navigationController pushViewController:imageView animated:YES];
[imageView release];
于 2011-05-24T07:04:02.317 に答える
0

私はそれを行う私の方法を持っています...これがあなたを助けるかもしれません...

テーブルビューに NSarray があります...そして次のビューには NsDictionary があります

- (void)tableView:(UITableView *)tableView   didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    int actualRowIndex = [[filteredIndexs objectAtIndex:indexPath.row] intValue];

    [_tableView deselectRowAtIndexPath:indexPath animated:YES];
    selectedMeal *selctedMealView = [[selectedMeal alloc]   initWithNibName:@"selectedMeal" bundle:nil];
    selctedMealView.offerDetails = [offers objectAtIndex:actualRowIndex];

    [self.navigationController pushViewController:selctedMealView animated:YES];
    //[selctedMealView changeText:[arryList objectAtIndex:indexPath.row]];
    [selctedMealView release];
}

ここでselectedmealは私の次のビューであり、オファーはテーブルビューのNSArrayであり、offerDetailsは選択された食事ビューのNSDictionaryです

テーブルビューでもNSdictionaryを作成し、このようにオブジェクトを設定しました

NSString *o_resturant_name = [offer objectForKey:@"restaurant_name"];
[[Globals sharedGlobals].resturantList addObject:o_resturant_name];

そしてviewdidloadのselectedmealビューはその値を読みました...

NSString *resturantNameText = [offerDetails objectForKey:@"restaurant_name"];

これは私にとって完璧に機能しています...

これはあなたを助けるかもしれません

于 2011-05-24T07:16:57.233 に答える
0

まず、メモリをNSStringに割り当てる必要はありません。次に、 ImageViewer で fileName のプロパティを設定しまし?

于 2011-05-24T06:57:50.807 に答える