2015-04-04 5 views
1

Я пишу iOS Today Extension, в котором есть UIImageView s. Я хочу установить изображения из URL-адреса в них, и поэтому я подумал, что лучше использовать SDWebImage. Я написал код ниже:SDWebImage в iOS Today Extension

#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

У меня есть тестовый проект, и я добавил SDWebImage, и он работает отлично. Я вижу изображение с данного URL. – Attiqe

ответ

0

Сначала удалите следующие:

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

Вы никогда не должны импортировать реализации линии, только заголовки , В общем принципе ООП вы должны скрывать реализацию от других классов, называемых инкапсуляцией.

Во-вторых, импорт #import <SDWebImage/UIImageView+WebCache.h>

Этот файл есть заявление вашего метода setImageWithUrl.

Cheers.

+0

Это по-прежнему вызывает ту же ошибку. – user4486205

+0

У вас есть файл #import ? Он не должен генерировать исключение, если у него есть это, потому что у этого класса есть объявление вашего метода. –

+0

Да, у меня это. Не может ли это иметь какое-то отношение к тому факту, что это расширение Today View? – user4486205