我有很多'项目'包含项目图片的对象。当我的应用程序运行时,它会从网址加载项目的图像。加载后,它会向NSNotificationCenter发布带有图像ID的通知。
我有一个UIImageView的子类,它有一个指向该项的指针并侦听具有该项ID的通知。当从网址加载项目图像时,imageView将图像更新为项目的图像。
然而,有时候(但不是100%的时间)会发生奇怪的事情并且我会抛出异常:
-[__NSCFType imageLoaded:]: unrecognized selector sent to instance
我认为ARC出于某种原因过早地发布了一个对象。但我不会使用弱指针因为我曾经有过糟糕的经历。这是一些代码:
//Inside my Item object
-(void)loadItemImage{
ConnectionManager *conman = [[ConnectionManager alloc] init];
[conman getImageWithURL:self.imageURL inBackgroundWithBlock:^(NSString *error, id image) {
if (image){
self.image = image;
[[NSNotificationCenter defaultCenter] postNotificationName:[NSString stringWithFormat:@"image%i", self.pk] object:nil]; //exception is thrown here.
}else{
NSLog(@"error: %@", error);
}
}];
}
//inside my ImageView class (subclass of UIImageView)
-(void)imageLoaded:(id)sender{
self.image = item.image;
}
对我来说有意义的是,如果某个对象以某种方式被释放,那么它是不是在听取通知?似乎如果对象正在侦听通知,那么它可以调用选择器方法。