我正在编写一个iOS Today Extension,里面有一些UIImageView
个。我想从其中的网址设置图片,所以我认为使用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'
答案 0 :(得分:0)
首先,删除以下内容:
#import "UIImageView+WebCache.m"
#import "SDImageCache.m"
您永远不必导入实现行,只需导入标题。在OOP的一般原则中,您应该隐藏其他类的实现,即称为封装。
其次,导入#import <SDWebImage/UIImageView+WebCache.h>
该文件声明了您的setImageWithUrl
方法。
干杯。