Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UILabel内容未刷新_Ios_Objective C - Fatal编程技术网

Ios UILabel内容未刷新

Ios UILabel内容未刷新,ios,objective-c,Ios,Objective C,我正在调用json/rest服务,并将返回的数据传递给屏幕上的UILabel。我的屏幕由一个静态分组表组成,其中有许多带有标题和详细信息的单元格。使用返回的内容设置uilabel.text后,屏幕不会显示值,但如果我点击uilabel,则会显示值。似乎我缺少刷新屏幕的命令。在回调块中从json/rest服务接收数据后,从viewDiDLoad方法调用下面的代码 [MEUser retrieveLoggedUserDetails:^(MEUser *meUser, NSError *error)

我正在调用json/rest服务,并将返回的数据传递给屏幕上的UILabel。我的屏幕由一个静态分组表组成,其中有许多带有标题和详细信息的单元格。使用返回的内容设置uilabel.text后,屏幕不会显示值,但如果我点击uilabel,则会显示值。似乎我缺少刷新屏幕的命令。在回调块中从json/rest服务接收数据后,从viewDiDLoad方法调用下面的代码

 [MEUser retrieveLoggedUserDetails:^(MEUser *meUser, NSError *error) {
        if (meUser) {
            dispatch_async(dispatch_get_main_queue(), ^{
                self.email.text = meUser.email;
                self.firstName.text = meUser.firstName;
                self.lastName.text = meUser.lastName;
                self.phone.text = meUser.phone;


            });
        }
    }];
任何帮助都将不胜感激

非常感谢,,
Marcos

答案就在代码本身。当您分派_async时,{}内的代码不会快速执行。相反,viewDidLoad将立即返回。有时之后,会出现以下行:

self.firstname.text = meUser.firstname;
根据您的描述,我猜可能会发生这样的情况:当您单击(轻触)标签时,您正在强制主队列清除其挂起的任务,其中一个任务可能在上面的代码中。所以它将值放入标签中,并显示给您


您需要决定何时刷新标签,然后只希望它保存更新的文本。

在设置文本后尝试此操作

[self.firstname setNeedsDisplay];

最后,我将UILabel组件切换到UIExtField,神奇的是,它工作得完美无缺。

您必须以独占方式从主线程调用UIKit。如果执行失败,则程序将调用未定义的行为。dispatch_get_main_queue()表示我正在从主线程调用,否?是否检查self.firstname是否为nil?它不是nil,值firstname将传递给对象。我可以保证这一点,因为当我点击UILabel后,就会显示内容简单。似乎当我点击UIlabel时,整个东西都会刷新。这会引发一个异常。你的意思是
[self.firstname setNeedsDisplay]
@HermannKlecker有什么原因会导致异常吗?我只是好奇。块中的代码在主队列本身上执行,尽管是异步的。那么异常的原因是什么呢?我只是假设self是一个视图控制器,firstname是UILabel,text是它的
NSString
属性,表示要显示的文本。如果正确,则
NSString
将不会响应
setNeedsDisplay
。您可以将该消息发送到视图,但不能发送到字符串。@HermannKlecker感谢您的提醒,这就是我的意思。我没有领会您最后的想法“您需要决定何时刷新标签,然后只希望它保存更新的文本。”“我的意思是负责查看更新值的代码。”(更新值后应立即调用[self.firstname setNeedsDisplay])。我在更新值后尝试了setNeedsDisplay命令,但无效。