2013-08-12 3 views
4

Я установил успешный синтаксический анализ текста и изображений в виде таблицы с использованием JSON/PHP/MYSQL. Я сохраняю только расположение изображений в базе данных, а фактические изображения хранятся в каталоге на моем сервере. Единственное, что хранится в отношении изображения в базе данных, это имя. Пример car.jpg. То, что я хочу сделать, - это префикс URL-адреса местоположения изображения на моем сервере, чтобы они могли быть проанализированы без необходимости входить в БД и вручную вводить URL-адрес. Вот некоторые из моего кода ...JSON Image Parsing/Prefixed URL

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

    static NSString *identifier = @"studentsCell"; 

    StudentsCell *cell = (StudentsCell *)[tableView dequeueReusableCellWithIdentifier:identifier]; 
    if (cell == nil) 
    { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"StudentsCell" owner:self options:nil]; 
     cell = [nib objectAtIndex:0]; 
    } 
    NSDictionary *studentsDict = [students objectAtIndex:indexPath.row]; 
    //I want to prefix the URL for the key imagepath but i dont know where and how to do it. 
    NSURL *imageURL = [NSURL URLWithString:[studentsDict objectForKey:@"imagepath"]]; 
    NSData *imageData = [NSData dataWithContentsOfURL:imageURL]; 
    UIImage *imageLoad = [[UIImage alloc] initWithData:imageData]; 

    cell.imageView.image = imageLoad; 

    NSString *name = [NSString stringWithFormat:@"%@ %@", [studentsDict valueForKey:@"first"], [studentsDict valueForKey:@"last"]]; 

    cell.title.text = name; 

    NSString *subtitle = [NSString stringWithFormat:@"%@", [studentsDict objectForKey:@"email"]]; 

    cell.subtitle.text = subtitle; 

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button.frame = CGRectMake(265, 6, 44, 44); 
    [button setImage:[UIImage imageNamed:@"email.png"] forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(email:) forControlEvents:UIControlEventTouchUpInside]; 
    [cell.contentView addSubview:button]; 

    // cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cellbackground.png"]]; 

    return cell; 
} 
+0

Никогда не используйте ____withContentsOfURL в коде пользовательского интерфейса. Он блокирует основной поток - ваше приложение будет казаться «рывком», если вам повезет, и он просто повесит полностью (и в конечном итоге падает), если вам не повезло. Используйте что-то вроде MKNetworkKit, у которого есть хорошая категория в UIImageView под названием imageAtURL: – jsd

ответ

2

Давайте предположим, что у вас было что-то вроде:

NSURL *baseURL = [NSURL URLWithString:@"http://www.your.site.here/images"]; // whatever the folder with the images is 

Тогда вы могли бы сделать:

NSURL *imageURL = [baseURL URLByAppendingPathComponent:[studentsDict objectForKey:@"imagepath"]]; 

Кстати, вы следует рассмотреть возможность использования категории UIImageView, например SDWebImage. Затем, вместо загрузки NSData с данными изображений синхронно, вы можете сделать асинхронную загрузку изображения:

[cell.imageView setImageWithURL:imageURL 
       placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 

Заполнителем является то, что должно быть показано, пока изображение загружается (возможно, просто пустое изображение) и Затем SDWebImage будет асинхронно извлекать изображение и обновлять ячейку при ее извлечении. Это даст гораздо более гибкий пользовательский интерфейс. Он также будет использовать кэширование изображений (поэтому, если вы прокрутите вниз, а затем выполните резервное копирование, изображение снова не будет восстановлено).

AFNetworking имеет аналогичную категорию UIImageView, но не совсем такую ​​же надежную реализацию. Но если вы уже используете AFNetworking, это вариант.