2012-04-18 6 views
1

Вот код, который я использую. Имейте в виду, это прекрасно работает в симуляторе. Однако, когда я запускаю тот же код при тестировании на своем iPad-устройстве, он не загружает изображение. Почему это может быть?UIImage не отображается на устройстве iPad, но он отображается на iPad Simulator

SDWebImageManager *manager = [SDWebImageManager sharedManager]; 
NSURL *url = [NSURL URLWithString:@"http://www.mywebsite.net/folder/Photos/thumbnails/IMG_1780.JPG"]; 
UIImage *cachedImage = [manager imageWithURL:url]; 

if (cachedImage) 
{ 
    // Use the cached image immediatly 
} 
else 
{ 
    // Start an async download 
    [manager downloadWithURL:url delegate:self]; 
} 


UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(80+196, 5, 192, 192)]; 
[button setImage:cachedImage forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(imageSelected:) forControlEvents:UIControlEventTouchUpInside]; 
[cell addSubview:button]; 
return cell; 

Буду признателен за любую помощь! Спасибо!

Редактировать: Измененный код, по-прежнему работает в Sim, но не на устройстве.

- (void)webImageManager:(SDWebImageManager *)imageManager didFinishWithImage:(UIImage *)image 
{ 
    // Do something with the downloaded image 
    //testImage = image; 
    testButton = [[UIButton alloc] initWithFrame:CGRectMake(80+196, 5, 192, 192)]; 
    [testButton setImage:image forState:UIControlStateNormal]; 
    [testButton addTarget:self action:@selector(imageSelected:) forControlEvents:UIControlEventTouchUpInside]; 

} 
    SDWebImageManager *manager = [SDWebImageManager sharedManager]; 
    NSURL *url = [NSURL URLWithString:@"http://www.mywebsite.net/album/Photos/thumbnails/IMG_1780.JPG"]; 
    UIImage *cachedImage = [manager imageWithURL:url]; 
    [self webImageManager:manager didFinishWithImage:cachedImage]; 
    if (cachedImage) 
    { 
     // Use the cached image immediatly 
     //[self webImageManager:manager didFinishWithImage:cachedImage]; 
     UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(80+196, 5, 192, 192)]; 
     [button setImage:cachedImage forState:UIControlStateNormal]; 
     [button addTarget:self action:@selector(imageSelected:) forControlEvents:UIControlEventTouchUpInside]; 
     [cell addSubview:testButton]; 
    } 
    else 
    { 
     // Start an async download 
     [manager downloadWithURL:url delegate:self]; 
    } 

ответ

0

Может быть, это слишком очевидно, но, вы проверили, есть ли у вашего iPad подключение к Интернету?

+0

Да, мне жаль, что все было так просто. :) Все подключено. –

+0

Если вы думаете о чем-нибудь другом, дайте мне знать! –

0

Загрузка async не может быть завершена при попытке создать UIButton. Последний фрагмент кода следует вызывать после завершения загрузки и внутри оператора if (насколько я могу видеть из этого кода).

4

Никогда не используя SDWebImageManager, но просто быстро взглянув на него, похоже, что вы все делаете правильно! С другой стороны, он не работает так ...

У меня была аналогичная проблема с этим однажды, и после долгого разрыва волос я в конце концов обнаружил, что системы подачи, используемые на устройстве &, симулятор отличается - на вашем iPad я считаю, что он чувствителен к регистру, но не на симуляторе. Дважды проверьте регистр имен файлов, это может иметь значение.

Редактировать - также, я предполагал, что вы пытаетесь использовать кэшированное изображение (вот почему оно появилось сразу), но если вы загружаете его, то я ожидаю, что ваш код инициализации кнопки будет преждевременным.

Другое Редактировать - Делегаты!

Вы знаете, что используете делегат SDWebImageManager? Вероятно, у него есть метод, который он вызывает при загрузке изображения - вам нужно реализовать протокол делегирования SDWebImageManager в своем классе, где вы настраиваете кнопки, и т. Д. - будет метод, похожий на - (void) imageDidFinishDownloading: (UIImage *) myImage, который вам нужно будет включить, и вот где вам нужно поместить изображения в кнопки.

+0

Хм, имеет смысл! Я попытался реализовать этого парня (по реализации я просто хочу добавить этот фрагмент к моему коду, не более того). - (Недействительными) webImageManager: (SDWebImageManager *) imageManager didFinishWithImage: (UIImage *) изображение { // Сделайте что-нибудь с загруженного изображения testImage = изображения; Чтобы не помогать ... Я попытался установить загруженное изображение равным глобальному образцу uiimage testImage, который я использую при создании кнопок, хотя он не работал даже в симуляторе. Я, скорее всего, сделал небольшую ошибку. –

+0

Я думаю, что добавил в то, что вы описали в моем измененном коде выше. Если бы вы могли взглянуть на него, я был бы признателен. –

+0

Вы проверили, вызван ли метод делегата? Кроме того, вы проверили случай с именем файла? – SomaMan

0

Легче написать новый ответ, чем изменить мой последний.

Вот немного кода, который может быть полезен -

-(void)webImageManager:(SDWebImageManager *)imageManager didFinishWithImage:(UIImage *)image { 

    // unless you have a way to know which row it's going into, we'll just add it to the end of the array 

    [downloadedImages addObject:image]; 

    [myTable reloadData]; 

} 


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [downloadedImages count]; 
} 


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 


    NSInteger row = indexPath.row; 

    UIImage *theImage = [downloadedImages objectAtIndex:row]; 

    UIButton *testButton = [[[UIButton alloc] initWithFrame:CGRectMake(80+196, 5, 192, 192)] autorelease]; 
    testButton.tag = row; // so we know which row the pressed button is in 

    [testButton setImage:theImage forState:UIControlStateNormal]; 
    [testButton addTarget:self action:@selector(imageSelected:) forControlEvents:UIControlEventTouchUpInside]; 

    [cell.contentView addSubview:testButton]; 

    return cell; 

} 


-(void)imageSelected:(UIButton *)pressedButton { 

    NSInteger row = pressedButton.tag; 

    // now you know which row was pressed... 
} 

Изменить код здесь (не поставить его в Tableview:! CellForRowAtIndexPath: метод) -

SDWebImageManager *manager = [SDWebImageManager sharedManager]; 
NSURL *url = [NSURL URLWithString:@"http://www.mywebsite.net/folder/Photos/thumbnails/IMG_1780.JPG"]; 
UIImage *cachedImage = [manager imageWithURL:url]; 

if (cachedImage) { 

    // Use the cached image immediately 
    [downloadedImages addObject:cachedImage]; 

    [myTable reloadData]; 

} else { 
    // Start an async download 
    [manager downloadWithURL:url delegate:self]; 
} 

Очевидно, что это довольно простой - вам нужно добавить материал для сброса таблицы или записать изображения в файлы, если их несколько. Надеюсь, поможет!

Смежные вопросы