#iphone #image-viewer
#iPhone #просмотр изображений
Вопрос:
Я пытаюсь передать значение строки из массива экземпляру ImageViewer
при создании ячейки табличного представления, но я получаю нулевые значения. Вот код:
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];
Не могли бы вы помочь мне, пожалуйста, устранить эту проблему?
Комментарии:
1. Где вы находите это
nil
значение? Из вашего вопроса неясно.2. здесь nil ..ImageView.fileName = file; Я проверил с помощью brekpoint
3. Что здесь равно нулю?
file
? Если это так, вам следует проверить содержимоеphotoFiles
массива4. Пожалуйста, проверьте мой ответ ниже, я добавил некоторую интересную информацию, на которую вам следует обратить внимание.
Ответ №1:
проверьте строку
file = [photoFiles objectAtIndex:indexPath.row];
и
Проверьте свойства для имени файла в imageviewer
Комментарии:
1. Я установил для него свойство и поместил NSLOG (@»% @», filename) Выдает значение Null
2. проверьте NSLOG (@»%@%@», ImageView.filename, файл)
Ответ №2:
Если 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]];
Но это также должно работать таким образом, поскольку имя класса и имя кончика совпадают:
ImageViewer *imageView = [[ImageViewer alloc] init];
Попробуйте и дайте мне знать, если что-то изменилось.
Комментарии:
1. Хорошо, я использую разделы ..if(indexPath.section == 1) { file = [photofiles objectAtIndex:indexPath.row]}
Ответ №3:
Во-первых, вам не нужно выделять память для NSString. Во-вторых, установили ли вы свойства для имени файла в ImageViewer?
Комментарии:
1. Я установил свойство в imageviewer.. Я пытаюсь получить имя изображения в строке. И то же самое отлично работает для имени текстового файла
Ответ №4:
Что ж, здесь недостаточно информации, чтобы дать ответ (вам нужно будет пройти через это с помощью отладчика и выяснить, почему вы получаете нулевое значение обратно), и у вас есть по крайней мере одна утечка памяти. Вот как я бы переписал представленный вами код:
ImageViewer *imageView = [[ImageViewer alloc] initWithNibName:@"ImageViewer" bundle:nil];
imageView.fileName = [photoFiles objectAtIndex:indexPath.row];
[self.navigationController pushViewController:imageView animated:YES];
[imageView release];
Ответ №5:
У меня есть свой способ сделать это… возможно, это поможет вам…
У меня есть 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];
и в представлении selectedmeal в viewdidload я прочитал это значение…
NSString *resturantNameText = [offerDetails objectForKey:@"restaurant_name"];
У меня это работает идеально…
возможно, это поможет вам