通知调用无效后,UIlabel中的setText

时间:2013-10-06 12:34:17

标签: ios objective-c uilabel nsnotificationcenter

我希望每次收到来自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打印出正确的信息!

谢谢!

1 个答案:

答案 0 :(得分:0)

在您的情况下,您不需要使用dispatch_async,因为通知处理程序在主线程中运行。它们在空闲时刻在主循环中执行 - 抱歉,如果我对技术词语有误,那么英语不适合我。

还有一件事:你不应该从块中引用self,因为self指向你的块,阻止指向self - 它们不会被释放。如果您真的想这样做,可以阅读this question