在viewWillAppear之后无法以编程方式更改UILabel文本

时间:2014-05-23 07:23:58

标签: ios uilabel

我的iOS程序中有一个例程,用于从Dropbox导入和操作文件。这可能需要一些时间(5-10秒),并且在用户执行时将用户返回到正常UI是没有意义的,所以我想提供一个视图,让用户知道什么是进步是。

从一个VC,我使用Dropbox的drop-in文件选择器,然后加载一个呈现的(模态VC):

        ZSImportVC *importVC = [[ZSImportVC alloc] init];
        importVC.results = results;
        [importVC setModalPresentationStyle:UIModalPresentationFormSheet];
        [self presentViewController:importVC animated:YES completion:^{
            [self performFetch];
        }];

VC(一个标准的UIViewController),有一个UILabel属性:

@property (weak, nonatomic) IBOutlet UILabel *statusMessage;

在viewWillAppear中:我可以毫无问题地设置此标签的文本。问题是,我希望继续更改此文本,因为继续操作文件的过程。

从viewDidAppear调用操作文件的方法:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self processImport];
}

但是,在processImport方法中,以下内容无效:

self.statusMessage.text = @"Some text to update the user.";

所以我创建了一个方法:

- (IBAction)updateStatus:(NSString *)message
{
    [self.statusMessage setText:message];
    NSLog(@"%@", message);
}

只是为了检查一下发生了什么。 NSLog显示该方法被称为okay,但标签文本没有改变。我尝试添加:

[self.statusMessage setNeedsDisplay];

该方法,但没有帮助。我没有使用任何私人队列或后台线程。我在某处读到使用NSNotification有帮助,所以我尝试将其添加到viewDidLoad:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateStatus:) name:@"updateStatus" object:nil];

然后将被调用的方法更改为:

- (void)updateStatus:(NSNotification *)message
{
    [self.statusMessage setText:message.object];
    NSLog(@"%@", message.object);
}

并使用以下方法从主方法调用此方法:

[[NSNotificationCenter defaultCenter] postNotificationName:@"updateStatus" object:@"Retrieving file from Dropbox" userInfo:nil];

我可以从控制台消息中看到updateStatus方法被调用,但文本仍然没有改变。显然,我在这里遗漏了一些东西。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在Debug透视图上检查ZSImportVC个实例。

我想你正在发送[self.statusMessage setText:message.object]; 另一个例子,它没有显示在屏幕上。

我的意思是,

在这里放一个调试点:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self processImport];     /* Debug point here*/
}

并检查self的十六进制方向。

现在,在这里做同样的事情:

- (void)updateStatus:(NSNotification *)message
{
    [self.statusMessage setText:message.object];  /* Debug point here*/
    NSLog(@"%@", message.object);
}

顺便说一下,我遇到了一些问题

 [[NSNotificationCenter defaultCenter] postNotificationName:@"updateStatus" object:@"Retrieving file from Dropbox" userInfo:nil];

因为收到此通知的实例不正确。

我修正了调用普通方法,但你可能不会这样做。

对不起我的英文:S