我的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方法被调用,但文本仍然没有改变。显然,我在这里遗漏了一些东西。有什么想法吗?
答案 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