0

こんにちは、プログラミング初心者です。私の問題は、画像を解析できないことです。画像は、テキストを含むリストに解析する必要があります。

JSONKit を使用して json を解析しています。古いバージョンの xcode があり、シミュレーター 4.3 しかありません。

テキストは解析できますが、画像は解析できません。画像を解析する方法についていくつかの例を見てきましたが、正しく実行できませんでした。

解析したいjson:

{[{"n_id":"1","n_name":"Green","n_text":"this is test","Image":"dasdas.jpg"}]}

私はこのようなものを使用する必要があると思います

NSData *img=[[NSData alloc]initWithContentsOfURL:url];
UIImage *image=[UIImage imageWithData:img];

しかし、それを自分のコードに組み込む方法がわかりません。私は少し迷っています。

前もって感謝します

////Json2ViewController.h

@interface Json2ViewController : UIViewController {
NSArray * list;
NSString * content;
NSString * many;
NSString * thumbNail;
NSMutableArray *studName;
NSMutableArray *ntext;
NSMutableArray *imagesArray;
NSArray *images;
}
 @property (nonatomic, retain) NSMutableArray* studName;
 @property (nonatomic, retain) NSMutableArray* ntext;
 @property (nonatomic, retain) NSMutableArray* imagesArray;

//Json2ViewController.m

- (void)viewDidLoad {
[super viewDidLoad];

NSData * JSONdata =[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://myurl.com"]];


 if([JSONdata length] == 0){
 [JSONdata release];
 return;
 }

NSArray *students =[JSONdata objectFromJSONData];

studName = [[NSMutableArray alloc] init];
ntext = [[NSMutableArray alloc] init];
imagesArray = [[NSMutableArray alloc] init];

for(NSDictionary *student in students)
{
    content = [student objectForKey:@"n_name"];
    if(content)
       [studName addObject:content];

    many = [student objectForKey:@"n_text"];
    if(many)
        [ntext addObject:many];

    images = [student objectForKey:@"Image"];
    if(images)
        [imagesArray addObject:images];

    }

}


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

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}


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

cell.textLabel.text = [studName objectAtIndex:indexPath.row];

cell.detailTextLabel.text = [ntext objectAtIndex:indexPath.row];
return cell;
}
4

2 に答える 2

1

次のように Json から画像の絶対サーバー パスを取得します。

https://www.google.co.in/images/srpr/logo3w.png

また

次のようなベース サーバー パスを定義します。

#define baseImgurl  @"https://www.google.co.in/images/srpr/"

に参加

NSString *imgurl = [NSString stringWithFormat:@"%@%@",baseImgurl,[imagesArray objectAtIndex:indexPath.row]];

cell.imageView.image = [[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imgurl]]]

遅延読み込みを避けるには、このライブラリを使用してください

#import <SDWebImage/UIImageView+WebCache.h>

...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *MyIdentifier = @"MyIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                       reuseIdentifier:MyIdentifier] autorelease];
    }

     NSString *imgurl = [NSString stringWithFormat:@"%@%@",baseImgurl,[imagesArray objectAtIndex:indexPath.row]];

    [cell.imageView setImageWithURL:[NSURL URLWithString:imgurl]
                   placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

    return cell;
}
于 2013-01-08T08:49:59.887 に答える
0

この行を変更する必要があります

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

なので

cell.imageView.image =  [UIImage imageNamed:[imagesArray objectAtIndex:indexPath.row]];

アプリバンドルに画像を含める必要があるもう1つのこと。それ以外の場合は、アプリキャッシュフォルダーに画像をダウンロードしてから、画像へのパスを作成してから、画像を読み込もうとする必要があります

于 2013-01-08T06:56:40.333 に答える