簡體   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