我希望每次收到来自nsmanageObjContext的通知时都更新我的标签文本。
这是我添加观察者的代码:
- (IBAction)requestFotPhoto {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateLabel) name:NSManagedObjectContextDidSaveNotification
object:self.facebook.managedObjectContext];
这是更新标签的方法:
-(void)updateLabel
{
NSString *text = [NSString stringWithFormat:@"Downalad %i pictures",[Photo NumeberOfAllPhotosFromContext:self.facebook.managedObjectContext]];
dispatch_async(dispatch_get_main_queue(), ^{
//UIKIT method
NSLog(@"text %@",text);
[self.downlaodLabel setText:text];
});
}
我假设updateLabel是在另一个线程中执行的,所以我执行更新主线程上的标签的指令,但是这段代码没有效果。问题出在哪里?
显然,NSlog打印出正确的信息!谢谢!
答案 0 :(得分:0)
在您的情况下,您不需要使用dispatch_async
,因为通知处理程序在主线程中运行。它们在空闲时刻在主循环中执行 - 抱歉,如果我对技术词语有误,那么英语不适合我。
还有一件事:你不应该从块中引用self
,因为self
指向你的块,阻止指向self
- 它们不会被释放。如果您真的想这样做,可以阅读this question。