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