[英]Can't programmatically change UILabel text after viewWillAppear
我的iOS程序中有一个例程,可以从Dropbox导入和处理文件。 这可能会花费一些时间(5-10秒),并且在执行操作时将用户返回到正常的UI没有意义,所以我想展示一个视图让用户知道进度。
从一个VC,我使用Dropbox的插入文件选择器,然后加载一个演示的(模式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显示该方法被称为正常,但标签文本未更改。 我尝试添加:
[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);
}
并从main方法调用此方法:
[[NSNotificationCenter defaultCenter] postNotificationName:@"updateStatus" object:@"Retrieving file from Dropbox" userInfo:nil];
我可以从控制台消息中看到updateStatus方法正在被调用,但是文本仍然没有改变。 显然我在这里缺少什么。 有什么想法吗?
在“调试”透视图中检查您的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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.