嗨,我是编程新手。 我的问题是我无法解析图像。需要将图像解析为带有文本的列表。
我正在使用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;
}
答案 0 :(得分:1)
从Json获取图像的绝对服务器路径,如:
或
定义基本服务器路径,如:
#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]]]
为避免延迟加载,请使用此library
#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;
}
答案 1 :(得分:0)
您需要更改此行
cell.imageView.image = = [imagesArray objectAtIndex:indexPath.row];
作为
cell.imageView.image = [UIImage imageNamed:[imagesArray objectAtIndex:indexPath.row]];
您还需要在应用包中添加图像,否则需要在app caches文件夹中下载图像,然后将路径设置为图像,然后尝试加载图像