【问题标题】:iOS: Can't set image in iCarouseliOS:无法在 iCarousel 中设置图像
【发布时间】:2018-01-10 21:26:24
【问题描述】:

我在我的objective-c 应用程序中使用iCarousel。每个轮播view 包含一个image。所以在

-(UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view 

我这样设置image

[carouselImage setImageWithURL:[NSURL URLWithString:myStringUrl] placeholderImage:[UIImage imageNamed:placeholderImage]];

此行中的应用程序崩溃。这是错误:

    -[CarouselUIView setImageWithURL:placeholderImage:]: unrecognized selector sent to instance
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CarouselUIView setImageWithURL:placeholderImage:]: unrecognized selector sent to instance 0x123d10a70'

当我搜索时,我发现许多解决方案建议在 Build Settings 中使用 -ObjC 标志,但我已经有了这个标志。

编辑:附加代码

这是我的函数的全部代码:

-(UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view {
    UIImageView * carouselImage;
    if (view == nil) {
        NSData *tempArchiveView = [NSKeyedArchiver archivedDataWithRootObject:self.carouselItemView];
        CarouselUIView * carousselView = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveView];
        view = carousselView;
    }

    carouselImage = (UIImageView *) [view viewWithTag:0];


    [carouselImage setImageWithURL:[NSURL URLWithString: myStringUrl] placeholderImage:[UIImage imageNamed:imagePlaceholder]];
    return view;
}

还有CarouselView

#import <UIKit/UIKit.h>

@interface CarouselUIView : UIView

@property (weak, nonatomic) IBOutlet UIImageView * carouselImage;


@end

【问题讨论】:

  • 你能显示一些额外的代码吗
  • 当然可以!
  • 您在此处提供的代码不足以为您提供正确的解决方案方向。无论如何,但我的猜测是 carsoulImage 不是 UIImageView 但它是 CarouselUIView
  • 检查 carouselImage 类名。使用 isKindOfClass。
  • 能不能添加这个viewForItemAtIndex相关的代码

标签: ios objective-c uiimageview icarousel


【解决方案1】:

查看您的给定代码,您用于使用 imageView 初始化视图的行有问题。

[view viewWithTag:0]; 

必须将标记值更改为 0 以外的值。因为所有视图的标签属性默认设置为0

编码愉快:)

【讨论】:

    【解决方案2】:

    试试这个可能对你有帮助。 如果轮播仅包含 ImageView

    -(UIView *) carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view{
        UIImageView  *imageView = (UIImageView *)view;
        if (!imageView) {
            imageView =[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, ViewWidth(carousel), 250)];
            imageView.tag = 100;
    
        }
        [imageView setImageWithURL:[NSURL URLWithString: myStringUrl] placeholderImage:[UIImage imageNamed:imagePlaceholder]];
    
        return imageView;
    }
    

    【讨论】:

    • iCarousel 数据源返回 -(UIView *) 而不是 -(UIImageView *)
    • 感谢您的回答,但您能解释一下为什么不需要您在上一条评论中提到的那段代码吗?
    • 可以返回,因为UIImageView是UIView的子类所以。
    • 但在你的回答中你返回-(UIImageView *)
    • 啊,好吧。如果我在 CarouselUIView 中有 UILabelUIImage 等其他元素怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多