Заполните UIView с помощью UIVIewController в приложении на основе навигации - PullRequest
0 голосов
/ 14 июля 2011

Я делаю тестовое приложение для вывода списка фильмов в приложении на основе навигации, используя данные из plist-файла, который я прочитал в своем appDelegate в application:didFinishLaunchingWithOptions:. Когда я пытаюсь перейти ко второму detailViewController, я получаю частично измененное название (я получаю название фильма, но вместо года в UIView.title я получаю что-то вроде «78898320» и пустой UIImageView & UILabels. Чего мне не хватает

Populated from my app rootViewController

Populated from my app detailViewController

Вот мой метод в rootViewController:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath     *)indexPath
{
NSLog(@"YOU SELECTED: %d",indexPath.row);

detailViewController *detailView = [[detailViewController alloc] initWithNibName:@"detailViewController" bundle:nil];

NSDictionary *dict = [NSDictionary dictionaryWithDictionary:
                      [movies objectAtIndex:indexPath.row]];

[detailView fill:dict];

[self.navigationController pushViewController:detailView animated:YES];
[detailView release];

}

Вот мой метод заполнения UIView в detailViewController:

-(void)fill: (NSDictionary*) fillData
{
//movie = [NSDictionary dictionaryWithDictionary:fillData];
NSLog(@"DETAILS: %@",[fillData objectForKey:@"description"]);

self.title = [NSString stringWithFormat:@"%@ (%d)",
              [fillData objectForKey:@"title"],
              [fillData objectForKey:@"year"]];
//[movie objectForKey:@"title"];
self.img = [[UIImageView alloc] initWithImage:
            [UIImage imageNamed:[fillData objectForKey:@"image"]]];
self.description = [fillData objectForKey:@"description"];
self.cast = [fillData objectForKey:@"cast"];
}

Когда я пытаюсь распечатать описание из словаря с помощью NSLog, оно печатается нормально.

Ответы [ 3 ]

2 голосов
/ 14 июля 2011

Вы используете %d для объекта, который вы получаете, используя

[fillData objectForKey:@"year"]

Вместо этого следует использовать %@, так как это, скорее всего, объект NSNumber.

1 голос
/ 14 июля 2011

Вам придется изменить некоторые вещи, чтобы это работало.Я предполагаю, что все ваши метки и изображения на самом деле находятся в файле NIB.

Делая:

self.img = [[UIImageView alloc] initWithImage:
            [UIImage imageNamed:[fillData objectForKey:@"image"]]];

вы фактически разрываете соединение между свойством и объектом в файле NIB,заменив его новым новым экземпляром.Если вы не добавите новый вручную в представление, ничего не появится.

Попробуйте использовать:

[self.img setImage:[UIImage imageNamed:[fillData objectForKey:@"image"]]];

То же самое относится к:

self.description = [fillData objectForKey:@"description"];
self.cast = [fillData objectForKey:@"cast"];

Попробуйте вместо:

[self.description setText:[fillData objectForKey:@"description"]];
[self.cast setText:[fillData objectForKey:@"cast"]];
0 голосов
/ 14 июля 2011
-(void)fill: (NSDictionary*) fillData
{
    //movie = [NSDictionary dictionaryWithDictionary:fillData];
    NSLog(@"DETAILS: %@",[fillData objectForKey:@"description"]);

    self.title = [NSString stringWithFormat:@"%@ (%d)",
          [fillData objectForKey:@"title"],
          [[fillData objectForKey:@"year"] intValue]];
    //[movie objectForKey:@"title"];
    self.img = [[UIImageView alloc] initWithImage:
          [UIImage imageNamed:[fillData objectForKey:@"image"]]];
    self.description = [fillData objectForKey:@"description"];
    self.cast = [fillData objectForKey:@"cast"];
}

Если вы не получаете изображение в виде изображения, потому что вы не устанавливаете его рамку и не добавляете его для просмотра (по крайней мере, здесь) ....

...