Quiero mostrar mis imágenes en vista de cuadrícula. He usado el controlador de vista UICollection, datos que estoy pasando en formato JSON. No puedo mostrar imágenes usando el formato JSON. ¿Alguien puede encontrar mi error? Aqui esta mi codigo

@interface ReceipeCollectionViewController()
{
    NSMutableData *webdata;
    NSURLConnection *connection;
    NSMutableArray *contentarray;
    NSMutableArray *array;
}

@end

@implementation ReceipeCollectionViewController

(void)viewDidLoad
{
    [super viewDidLoad];
    [array removeAllObjects];
    [[self collectionView]setDelegate:self];
    [[self collectionView]setDataSource:self];
    array = [[NSMutableArray alloc] init];     
}

(void)viewDidAppear:(BOOL)animated
{
    NSString *serverurl=@"http://wesotech.com/web/myrecipe/web_services/recipe_listing.php?";
    NSURL *url=[NSURL URLWithString:serverurl];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    connection = [NSURLConnection connectionWithRequest:request delegate:self];
    if(connection)
    {
        webdata=[[NSMutableData alloc]init];
    }
    else
    {
        NSLog(@"Connection failure");
    }
}

(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [webdata appendData:data];
}

(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"Fail with error");
}

(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSError *error;
    NSArray *results=[NSJSONSerialization JSONObjectWithData:webdata options:0 error:&error];
    [array removeAllObjects];
    [array addObjectsFromArray:results];
    [[self collectionView]reloadData];
}

(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [webdata setLength:0];
}

(void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 1;
}

(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return [array count];
}

(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    [self.mySpinner stopAnimating];

    static NSString *identifier = @"Cell";

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

    UIImageView *recipeImageView = (UIImageView *)[cell.contentView viewWithTag:100];

     recipeImageView.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[[array objectAtIndex:indexPath.row] valueForKey:@"image"]]]];

    UITextField *recipeTitleView =(UITextField *)[cell.contentView viewWithTag:101];

    recipeTitleView.text=[[array objectAtIndex:indexPath.row]valueForKey:@"recname"];

    return cell;
}

@end

Mi formato JSON es,

[

    {"image":"http:\/\/wesotech.com\/web\/myrecipe\/recipeimages\/2016080614704658059030.jpg","recname":"Italian Chicken","recid":"1"},
    {"image":"http:\/\/wesotech.com\/web\/myrecipe\/recipeimages\/2016080614704653421637.jpg","recname":"Fast Food Friday","recid":"2"},
    {"image":"http:\/\/wesotech.com\/web\/myrecipe\/recipeimages\/2016080614704648912893.jpg","recname":"Honey Clazed Lamb Chops","recid":"3"}

]
1
SakthiDeviPriya N 23 ago. 2016 a las 14:01

2 respuestas

La mejor respuesta

En lugar de escapar de su URL con \, use la codificación porcentual en su JSON y decodifíquela de nuevo a una cadena sin escape usando el siguiente código

NSString *imageUrl = @"http%3A%2F%2Fwesotech.com%2Fweb%2Fmyrecipe%2Frecipeimages%2F2016080614704658059030.jpg";
NSString *url = [imageUrl stringByRemovingPercentEncoding];

Otro punto importante: dado que está cargando una imagen con http://, debe establecer Allow Arbitrary Loads en YES en App Transport Security Settings en su {{X4} } expediente.

Además, tenga en cuenta que no es aconsejable establecer permitir cargas arbitrarias, ya que daría lugar a problemas de seguridad. Seria mejor si tu podría tener todas las llamadas de su red para usar https://

0
R P 23 ago. 2016 a las 13:50

Cree una clase de tableViewCell y asigne ese nombre de clase a la celda de collectionView en el área de utilidad. Haga la salida de imageView en la clase tableViewCell y acceda a ella en el método delegado cellForItemAtIndexPath. Luego asigne la imagen con este código:

[cell. recipeImageView sd_setImageWithURL:[NSURL URLWithString:[[array objectAtIndex:indexPath.row] valueForKey:@"image"]]];

Esto seguramente te ayudará.

0
Gursimran Singh 23 ago. 2016 a las 13:24