2013-02-18 5 views
0

Я пытаюсь передать URL-адрес от UITableViewController до UIViewController, но по какой-то причине изображение не отображается в UIImageView из представленного URL-адреса. Вот мой код:Передача данных между контроллерами

TableView.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *url = @"http://www.macdigger.ru/wp-content/uploads/2013/02/Apple-Nokia-Samsung-1.jpg"; 

    ImageViewController *imageView = [[ImageViewController alloc] init];   
    [self.navigationController pushViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"imageViewController"] animated:YES]; 

    [imageView setDetailItem:url]; 

} 

ImageViewController.m

@interface ImageViewController() 
- (void)configureView; 
@end 

@implementation ImageViewController 

- (void)setDetailItem:(id)newUrl 
{ 
    NSLog(@"%@", newUrl); 
    self.urlOfImage = newUrl; 
    [self configureView]; 

} 

- (void)configureView 
{ 
     NSURL *url = [NSURL URLWithString:_urlOfImage]; 
     NSLog(@"%@",url); //There URL is normally displayed in the log 
     NSData *data = [NSData dataWithContentsOfURL:url]; 
     UIImage *image = [UIImage imageWithData:data]; 
     _imageView.image = image;//And then the picture does not want to output 
} 

В журналах отображается передается URL (где выделен жирным шрифтом). Оказывается, что сам URL-адрес передан, но UIImageView, не отображает изображение с этого URL-адреса.

P.P.S. данных отображается в журналах в виде "<ffd8ffe1 00184578 69660000 49492a00 08000000 00000000 00000000 ffec0011 4475636b 79000100 04000000 460000ff e1031b68 7474703a 2f2f6e73 2e61646f 62652e63 6f6d2f78 61702f31 2e302f00 3c3f7870 61636b65 74206265 67696e3d 22efbbbf 22206964...>"

+0

вы связаны/связанные ImageView? –

+0

@AKV Да, конечно, –

+0

попробуйте nslogging чуть выше _imageView.image ..... это печать некоторых чисел или null/nill? –

ответ

1

Может быть ошибка, потому что ViewController еще не загружен, попытайтесь проверить уже ли загружен в setDetailItem метод, если он не загружен - configureView в viewDidLoad:

- (void)setDetailItem:(id)newUrl 
{ 
    NSLog(@"%@", newUrl); 
    self.urlOfImage = newUrl; 
    if ([self isViewLoaded]) { 
     [self configureView]; 
    } 

} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    if (self.urlOfImage) { 
     [self configureView] 
    } 
} 
+0

К сожалению, не помогло ((я не понимаю, почему изображение загружается с переданного URL-адреса (отображается «данные»), но не будет опубликовано! –

+1

Попробуйте проверить в своем представлении конфигурации ли _imageView! = Nil, если это так - проверьте свои IBOutlets или где вы его создаете. – Mikhail

+0

Если Михаил прав, что вполне может быть, то ваш configureView вызывается до того, как будет наконец загружено представление. Если это так, то загрузка представления из NIB (или при выполнении loadView соответственно) очистит содержимое _imageView.Тем не менее, _imageView будет выделен в первый раз. Странная вещь с obj-c заключается в том, что '_imageView.image = image;' будет исполнять nicley, когда _imageView равен нулю. Но, конечно, это делает ничего не отображают. –

1

Почему бы вам не сделать еще один инициализатор?

ImageViewController *imageView = [[ImageViewController alloc] initWithURL:urlToGo]; 

в .m файл, вверху:

@interface ImageViewController() 
@property (nonatomic, strong) NSURL *url; 
@end 

- (id)initWithURL:(NSURL *url){ 
    self = /* any kind of normal initialization, xib or storyboard */ [super init]; 
    if (self) { 
     _url = url; 
    } 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self configureView]; 
} 
Смежные вопросы