繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM