如何从json获取的url将图像加载到collectionview

时间:2013-05-17 04:41:31

标签: iphone ios json core-data restkit-0.20

我有一个IOS应用程序,它使用RestKit将json格式的数据从服务器拉入CoreData实体。数据中的一个属性是与特定文章相关联的图像的URL。我正在尝试将该图像加载到我的collectionViewController。这就是我一直在尝试但没有成功。

开始
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

我正在尝试这个

    NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];
    NSURL *photoURL = [object valueForKey:@"imageUrl"];
    NSData *photoData = [NSData dataWithContentsOfURL:photoURL];
    cell.cellimg = [[UIImage alloc] initWithData:photoData];
    [cell.title setText:[object valueForKey:@"title"]];

如果我注释掉抓取并加载图像的尝试,则视图会加载默认图像以及从json数据接收的文章标题。基于此我知道一切都正确进入。

我还确定为*photoData分配了正确的网址。但每次遇到NSData行时,控制台都会输出“ - [__ NSCFString isFileURL]:无法识别的选择器发送到实例....

老实说,我不知道这是否是正确的方法,或者它是否会起作用。我是新手,所以任何帮助都会很棒。鉴于我是新手,一些小代码示例将真正有用,并解释了解决此问题的正确方法。

以下是我定义*cellimg*title

的头文件
#import <UIKit/UIKit.h>

@interface GlobismNewsCollectionViewCell : UICollectionViewCell
@property (strong, nonatomic) IBOutlet UIImage *cellimg;
@property (weak, nonatomic) IBOutlet UILabel *title;
@property (weak, nonatomic) NSURL *imageUrl;

@end

2 个答案:

答案 0 :(得分:0)

我认为您使用NSString作为NSURL。所以试着用这个......

NSURL *photoURL = [NSURL URLWithString:(NSString *) [object valueForKey:@"imageUrl"]];

答案 1 :(得分:0)

感谢Dharmbir,我在问这个问题的25分钟内完成了这个问题!

为了澄清像我这样的新人,我改变了Dharmbir建议的行,所以块现在看起来像这样

NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSURL *photoURL = [NSURL URLWithString:(NSString *) [object valueForKey:@"imageUrl"]];
NSData *photoData = [NSData dataWithContentsOfURL:photoURL];
[cell.cellimg setImage:[[UIImage alloc] initWithData:photoData]];        
[cell.title setText:[object valueForKey:@"title"]];

请注意,块中的第4行也从此

更改
cell.cellimg = [[UIImage alloc] initWithData:photoData];

到这个

[cell.cellimg setImage:[[UIImage alloc] initWithData:photoData]];

我还必须将*cellimg属性更改为此

@property (strong, nonatomic) IBOutlet UIImageView *cellimg;

来自这个

@property (strong, nonatomic) IBOutlet UIImage *cellimg;

我不得不改为UIImageView类,因为我的故事板中的单元格基于UIImageView类。希望这有助于有需要的人再次感谢Dharmbir!