【问题标题】:SDWebImage in iOS Today ExtensioniOS Today 扩展中的 SDWebImage
【发布时间】:2015-04-04 09:46:34
【问题描述】:

我正在编写一个 iOS Today 扩展,其中包含一些 UIImageViews。我想从其中的 url 设置图像,所以我认为使用 SDWebImage 会是最好的。我写了下面的代码:

#import "TodayViewController.h"
#import <NotificationCenter/NotificationCenter.h>
#import "UIImageView+WebCache.h"
#import "SDImageCache.h"
#import "UIImageView+WebCache.m"
#import "SDImageCache.m"

@interface TodayViewController () <NCWidgetProviding>

@property (strong, nonatomic) UIImageView *firstImage;

@property (strong, nonatomic) UILabel *titleLabel;

@property (strong, nonatomic) NSDictionary *dataOne;

@end

@implementation TodayViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    [self updateData];

    self.preferredContentSize = CGSizeMake(self.view.frame.size.width, 230);

    NSInteger quarterSize = self.view.frame.size.width/4;
    NSInteger eightSize = quarterSize/4;

    self.firstImage = [[UIImageView alloc] initWithFrame:CGRectMake(eightSize, 45, quarterSize, quarterSize*1.25)];
    [self.firstImage sd_setImageWithURL:[NSURL URLWithString:@"http://anluan.com/crest2.jpg"]];
    [self.view addSubview:self.firstImage];

    self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(eightSize, self.firstArticle.frame.origin.y + self.firstArticle.frame.size.height + 10, quarterSize, 20)];
    self.titleLabel.text = [self.dataOne objectForKey:@"title"];
    self.titleLabel.numberOfLines = 2;
    self.titleLabel.textColor = [UIColor whiteColor];
    self.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:13];
    [self.titleLabel sizeToFit];
    [self.view addSubview:self.titleLabel];
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super initWithCoder:aDecoder]) {
        [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(userDefaultsDidChange:)
                                                 name:NSUserDefaultsDidChangeNotification
                                               object:nil];
    }
    return self;
}

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets
{
    return UIEdgeInsetsZero;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
    // Perform any setup necessary in order to update the view.

    // If an error is encountered, use NCUpdateResultFailed
    // If there's no update required, use NCUpdateResultNoData
    // If there's an update, use NCUpdateResultNewData

    completionHandler(NCUpdateResultNewData);
}

- (void)userDefaultsDidChange:(NSNotification *)notification {
    [self updateNumberLabelText];
}

- (void)updateNumberLabelText {
    NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.company.TodayExtensionDefaults"];
    self.dataOne = [defaults objectForKey:@"dataOne"];
    }
}

@end

但是,这一直在崩溃,抛出这个错误:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImageView sd_setImageWithURL:]: unrecognized selector sent to instance 0x7a88cc30'

【问题讨论】:

  • 我已经设置了一个测试项目,我已经添加了 SDWebImage,它工作得非常好。我可以从给定的 url 看到图像。

标签: ios objective-c uiimageview sdwebimage


【解决方案1】:

首先,删除以下内容:

#import "UIImageView+WebCache.m"
#import "SDImageCache.m"

您不必导入实施行,只需导入标题。在 OOP 的一般原则中,您应该对其他类隐藏实现,这称为封装。

二、导入#import &lt;SDWebImage/UIImageView+WebCache.h&gt;

该文件声明了您的 setImageWithUrl 方法。

干杯。

【讨论】:

  • 你有文件#import 吗?如果你有它,它不应该抛出异常,因为那个类有你的方法的声明。
  • 是的,我有。难道这与这是一个“今日视图”扩展程序这一事实有关吗?
  • @user4486205 我认为问题是,您在项目中没有正确包含 SDWebImage 库。它与您的控制器无关,它只是告诉您应用程序找不到具有此类名称的方法。如果你命令点击#import 你会找到你想要调用的方法。我的建议 - 删除 SDWeb 图像并包括 AFNetworking。这比挖掘你的代码更好,10 分钟后你将有类似的方法工作(如果你正确地包含了 AFNetworking 库)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多