以下是代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"ConvoreCell";
ConvoreCell * cell = (ConvoreCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"ConvoreCell" owner:nil options:nil];
for (id currentObject in topLevelObjects){
if ([currentObject isKindOfClass:[UITableViewCell class]]){
cell = (ConvoreCell *) currentObject;
break;
}
}
}
NSMutableDictionary *cellValue = [results objectAtIndex:indexPath.row];
NSString *picURL = [[cellValue objectForKey:@"creator"] objectForKey:@"img"];
if ([picURL isEqualToString:@"https://secure.gravatar.com/avatar/1f043010eb1652b3fab3678167dc0487/?default=https%3A%2F%2Fconvore.com%2Fmedia%2Fimages%2Feric.png&s=80"])
picURL = @"https://convore.com/media/images/eric.png";
if ((picURL != (NSString *) [NSNull null]) && (picURL.length !=0)) {
NSLog(@"%@", picURL);
NSData *imgData = [[[NSData dataWithContentsOfURL:
[NSURL URLWithString:
picURL]] autorelease] retain];
[cell.pic initWithImage:[[UIImage alloc] initWithData:imgData]];
} else {
cell.pic = nil;
}
//NSLog(@"Name is : %@", [cellValue objectForKey:@"name"]);
cell.title.text = [cellValue objectForKey:@"name"];
cell.info.text = (@"Created by: %@", [[cellValue objectForKey:@"creator"] objectForKey:@"name"]);
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
// Configure the cell...
return cell;
}
由于某种原因,图像没有显示出来。我在这做错了什么?图片的网址有效,我查了一下。
另外我不想在TableViewCell上有配件视图,我确实在IB中指定为no,但它仍然显示...我将配件属性设置为无
答案 0 :(得分:1)
您的代码中存在一些问题。
NSData *imgData = [[[NSData dataWithContentsOfURL:
[NSURL URLWithString:
picURL]] autorelease] retain];
前者不是一个真正的问题(也许是巧合?!),但它很丑陋而令人困惑。摆脱自动释放和保留。您从dataWithContentsOfURL获取的对象已经自动释放。
[cell.pic initWithImage:[[UIImage alloc] initWithData:imgData]];
你真正的问题可能是这个。据我所知,你应该只调用一次init;在你分配了一个对象之后。
因此,如果cell.pic是UIImageView,我会尝试将代码更改为:
cell.pic.image = [[[UIImage alloc] initWithData:imgData] autorelease];
看到图像后,您应该更改代码,以便将图像保存在用于填充单元格的数据中。每次出现单元格时都会下载图像。这是你不应该做的事情。但这超出了这个问题。
编辑:
你呢?但我可以看到这行代码:我也不想拥有 TableViewCell上的附件视图,I 确实在IB中指定为否,但它 仍显示... 我设置了配件 属性为无
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
答案 1 :(得分:0)
你应该能够通过
获得UIImage[cell.pic initWithImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSUrl NSURL picURL]]]];
答案 2 :(得分:0)
您没有展示您的cellForRowAtIndexPath方法,这是分析正在发生的事情的关键。典型的范例是UITableViewCell对象被UITableView重复使用。当UITableView调用cellForRowAtIndexPath时,您应该将UIImage设置为单元格。
答案 3 :(得分:0)
导致您立即崩溃的问题是ConvoreCell的笔尖正在尝试设置您已声明的IBOutlet,但却找不到实际设置它的方法。我会检查你是否合成了你的pic属性。 这里还有其他问题。这条线
[cell.pic initWithImage:[[UIImage alloc] initWithData:imgData]];
错了;您不要在已存在的对象上调用init,而只在分配对象时调用init。做点什么
cell.pic = [[[WhateverClassPicIS alloc] initWithImage:[[UIImage alloc] initWithData:imgData]];
此外,您在主线程上使用NSData dataWithContentsOfURL。当您连接到网络时,这将锁定您的用户界面不确定的时间。改为使用异步调用。