Soru & Cevap

Json Data' da Yer Alan Image URL' leri Parçalayama ...

03.09.2014 - 03:28

Merhabalar, Kod kısmım şöyle;

[code]#import "TableViewController.h"
@interface TableViewController (){
    NSMutableData *webData;
    NSURLConnection *connection;
    NSMutableArray *labelArray;
    NSMutableArray *imageArray;
}
@end
@implementation TableViewController
- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}
- (void)viewDidLoad
{
    [super viewDidLoad];

    

    NSMutableArray *removeAllData = [NSMutableArray arrayWithObjects:imageArray,labelArray,nil];
    [removeAllData removeAllObjects];

    


    [self.tableView setDelegate:self];
    [self.tableView setDataSource:self];
    labelArray = [[NSMutableArray alloc]init];
    imageArray = [[NSMutableArray alloc]init];

    

    NSString *strURL = @"https://itunes.apple.com/tr/rss/newapplications/limit=25/json";
    NSURL *url = [NSURL URLWithString:strURL];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    connection = [NSURLConnection connectionWithRequest:request delegate:self];

    

    if (connection) {
        webData = [[NSMutableData alloc]init];
    }

    

}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    [webData setLength:0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    [webData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    NSLog(@"Error");
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    NSDictionary *allDataDictionary = [NSJSONSerialization JSONObjectWithData:webData options:kNilOptions error:nil];
    NSDictionary *allFeedDictionary = [allDataDictionary objectForKey:@"feed"];
    NSArray *arrayOfEntry = [allFeedDictionary objectForKey:@"entry"];

    

    for (NSDictionary *diction in arrayOfEntry) {
        NSDictionary *title = [diction objectForKey:@"title"];
        NSDictionary *imImage = [diction objectForKey:@"im:image"];

        

        for (NSDictionary *imageDict in imImage) {
            NSDictionary *imageLabel = [imageDict objectForKey:@"label"];
            [imageArray addObject:imageLabel];
        }

        

        NSString *label = [title objectForKey:@"label"];
        [labelArray addObject:label];
    }
    [self.tableView reloadData];
    NSLog(@"%@",[imageArray objectAtIndex:0]);
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return labelArray.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    

    //NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString: [imageArray objectAtIndex:indexPath.row]]];
    NSData *imageData = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:[imageArray objectAtIndex:indexPath.row]]];
    UIImage *image = [[UIImage alloc] initWithData:imageData];

    

    cell.textLabel.text = [labelArray objectAtIndex:indexPath.row];
    cell.imageView.image = image;

    

    return cell;

}[/code]

 

İzlemiş olduğum yöntemin doğru olup olmadığını bilmiyorum ama Title' ları tableView ' a çekiyorum fakat işler resimleri cell' e atmaya geldiğinde karışıyor. Burada yer alan resimlerin her birisi farklı 3 boyutta sıralanıyor yani tutarsızlık oluyor. Sorum tam olarak şöyle oradaki her bir nesneye ait tek bir resim dosyasının linkini nasıl alabilirim? Yardımlarınız için teşekkürler...

 

jSon Data Adresi :

Link

jSon Parser Linki:

Link

44 Görüntülenme

2 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user ekucet
ekucet
04.09.2014 - 12:42

Döngüyü kırmadığımdan dolayı böyle oluyormuş. Sorun çözüldü teşekkürler... Yani şu kısım:

[code]    for (NSDictionary *diction in arrayOfEntry) {
        NSDictionary *title = [diction objectForKey:@"title"];
        NSDictionary *imImage = [diction objectForKey:@"im:image"];
        
        for (NSDictionary *imageDict in imImage) {
            NSDictionary *imageLabel = [imageDict objectForKey:@"label"];
            [imageArray addObject:imageLabel];

Break; //Bunu eklediğim zaman sorun çözüldü.
        }
        
        NSString *label = [title objectForKey:@"label"];
        [labelArray addObject:label];
    }[/code]

 

picture-3650-1421928561.jpg
anilsozeri
03.09.2014 - 04:13

Merhaba,

Bu kurduğunuz yapı yerine AFNetworking kütüphanesini kullanarak parçalama yapıp daha sonra aldığınız değerleri Class içerisine yükleyip her bir kayıt için yeniden class instance'ı türeterek dizilere yükleyerek istediğiniz kısımları almanız çok daha rahat olacaktır.

AFNetworking ile istekten bulunup, daha sonra JSONParse ve değerlerin yüklenip alınması için bir sınıf yazabilirsiniz. Aşağıdaki linki incelemenizi öneririm;

http://www.raywenderlich.com/59255/afnetworking-2-0-tutorial

Sorunuza da direk olarak yanıt vermem gerekirse aldığınız JSON datalarını NSDictionary sınıfından instance' a yükleyerek key-value şeklinde değerlere ulaşabilirsiniz. Örneğin, key değerleriniz title özelliklerinden oluştuğunu düşünürsek value içerisinden image verilerine ulaşabilirsiniz.

İyi çalışmalar.

Erkam KÜCET
04.09.2014 - 11:07
Yok başaramadım ya. Olmadı bi türlü...
Anıl SÖZERİ
04.09.2014 - 11:23
Genel mantık bu şekilde yapılar doğru kurulduğu takdir de olacaktır diye düşünüyorum.
Erkam KÜCET
04.09.2014 - 08:55
AFNetworking şu noktada bana nasıl bir katkı sağlar acaba? Bağlantılar gerçekleşmiş durumda zaten. Parse işlemi için de kullanabiliyor muyuz bunu? Problem aslında tam olarak şöyle Anıl Hocam, NSMutableArray' a yapı gereği içinde üç tane aynı tag ("label") bulunan fakat boyutları farklı resimleri atıyor. Buradan örneğin 57x57 boyutundaki resimi almak istiyorum. Yani diğer iki resminde ragları aynı olduğundan dolayı array' a atarken 3 farklı boyutta aynı resimler geliyor diyebiliriz. JSON text' e veya ekte gönderdiğim resme bakarsanız ne demek istediğimi daha iyi anlatmış olacağım. Teşekkürler...
Anıl SÖZERİ
04.09.2014 - 09:08
AFNetworking eski NSURLConnection sınıfına karşıt olarak geliştirilmiş bir kütüphane daha verimli çalıştığından dolayı genelde bu yapı tercih ediliyor. Array'deki yapıya gelecek olursak içerisindeki resim datalarında boyuta göre illaki bir farklılık belirtilmiştir. Belirtilmediyse muhtemelen aynı indis üzerinden geliyordur. 3 farklı boyutta resim geliyor dersek, 0. indistekinin 57x57 boyutundaki imagedır. Zaten resimdeki datalara da bakarsak hep aynı sıralamada geliyor boyutları ona göre bir mantık kurabilirsin diye düşünüyorum. Kolay gelsin.