Проблемы с установкой правильного имени файла в ImageViewer

#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"];
  

У меня это работает идеально…

возможно, это поможет вам