2012-01-12 4 views
0

Привет У меня есть этот код для загрузки изображений с сервера, а затем, чтобы показать их в виде таблицы с текстом (если нет изображения я хочу показать текст в любом случае):IPhone показ изображений в Tableview

// загрузить часть

NSMutableString *photourl=[[NSMutableString alloc] initWithString:url_image]; 
    [photourl appendString:[dic objectForKey:@"photo"]]; 

    @try{ 

     //add to mutable array 
    [photoSmallImageData addObject:[NSData dataWithContentsOfURL:[NSURL URLWithString:photourl]]]; 
    } 
    @catch (id Exception) { 
     [photoSmallImageData addObject:[NSData dataWithContentsOfURL:[NSURL URLWithString:url_image]]]; 

    } 

// часть кода просмотра таблицы

NSData *imageData = [photoSmallImageData objectAtIndex:indexPath.row]; 

    @try { 

     cell.imageView.image = [UIImage imageWithData:imageData]; 
    } 
    @catch (NSException *exception) { 
     cell.imageView.image = [UIImage imageNamed:@"icon72.png"]; 
    } 
  1. это работает, но дело в том, иногда нет изображения, так что я хотел бы заменить его некоторым значком, но поскольку мы не можем добавить nil в массив, я просто добавлю часть моей ссылки туда, а затем даже если ссылка не работает для данных изображения, она не вызывает метод catch. Я не знаю, могу ли я каким-то образом заменить url на локальный url, но я не знаю, как это сделать. Также я не могу пропустить этот шаг, потому что изображения не будут соответствовать тексту рядом с ним.

2. Изображения всех разных размеров, и я хотел бы, чтобы они имели стандартный вид и были центрированы, есть ли способ сделать это и в какой момент кода? Большое спасибо

EDIT Я нашел метод: dataWithContentsOfURL: опции: ошибка: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html , но я не знаю, как использовать его

ответ

2

Почему бы вам не создать изображения, когда изображение данные загружаются и сохраняются в массиве? Кроме того, вы правы, чтобы после dataWithContentsOfURL: options: error:. Учитывая, что вы держите имена изображений в вьего словаря, код будет выглядеть следующим образом:

NSMutableString *photourl=[[NSMutableString alloc] initWithString:url_image]; 
[photourl appendString:[dic objectForKey:@"photo"]]; 

//try to create the image 
NSError* err = nil; 
UIImage* img = nil; 
NSData* tempData = [NSData dataWithContentsOfURL:[NSURL URLWithString:photourl] options:NSDataReadingMappedIfSafe error:&err]; 
if (!err) { 
    // image data loaded, create image 
    img = [UIImage imageWithData:tempData]; 
} else { 
    // image data could not be loaded, display error 
    NSLog(@"%@", err); 
    // put the default image in the array 
    img = [UIImage imageNamed:@"icon72.png"]; 
} 
[photoSmallImage addObject:img]; 

А потом в табличном делегате:

cell.imageView.image = [photoSmallImage objectAtIndex:indexPath.row]; 

Что касается второй части вашего вопрос, вы можете взглянуть на contentMode property of UIView class. По умолчанию используется масштаб. Управляя этим свойством на cell.imageView, вы можете добиться желаемого эффекта.

+0

отлично, что я искал, спасибо – vallllll

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