iOS 标签的文本属性在 Parse 查询后没有更新?

标签 ios objective-c parse-platform

我有一个运行良好的 Parse 查询,然后我想用查询返回的内容更新模拟器中标签的文本值。当我在控制台中打印标签的文本值时,会显示正确的值。但是,当我运行模拟器时,它似乎为空(或标签不更新)。 (旁注:我为标签设置了 UI 约束,并确保标签就位。我已经使用静态值对其进行了测试)。

- (void)viewDidLoad{

    [super viewDidLoad];

    __block PFObject *queriedObj;
    __block NSArray *queriedArray;

    self.finishedQuery = false;
    NSLog(@"view did load ID = %@", self.ID);

    if (self.ID) {

        // QUERY BEGINS
        PFQuery *query2 = [PFQuery queryWithClassName:@"Questions"];
        [query2 whereKey:@"objectId" equalTo:self.ID];
        //queriedArray = [query2 findObjects];
        [query2 findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
            if (!error) {
                queriedArray = objects;
                // queriedArray has 1 PFObject.

                for (PFObject *obj in queriedArray) {
                    queriedObj = obj;
                } // Grabs the PFObject
                // Grabs an Array of elements from the PFObject
                self.AnswersArray = [queriedObj objectForKey:@"Answers"];

                // Test to confirm array not null
                NSLog(@"array elts: %lu", (unsigned long)[self.AnswersArray count]);


                if ([self.AnswersArray count] == 1) { // if one item in array, only show 0th index

                    self.labelString = [self.AnswersArray objectAtIndex:0];
                    NSLog(@"label string: %@", self.labelString);

                    //self.AnswersText.text = self.labelString;

                    NSLog(@"answerstext: %@", self.AnswersText.text);
                }
                if ([self.AnswersArray count] != 0 && [self.AnswersArray count] != 1) {
                    [self generateRandomInt];
                    NSLog(@"random: %d", self.randomInt);

                    self.labelString = [self.AnswersArray objectAtIndex:self.randomInt]; // displays a random answer
                    self.AnswersText.text = self.labelString;
                }

                NSLog(@"final answers text: %@", self.AnswersText.text);

            }
        }];
    } 
}

本质上,标签的值 (self.AnswersText.text) 在控制台中正确打印。但是,它在模拟器中没有改变。有谁知道为什么?

最佳答案

您正在后台执行此操作。

UI things need to happen on the main thread / main queue .

尝试做:

dispatch_async(dispatch_get_main_queue(), ^{
    self.AnswersText.text = self.labelString;
});

可以看到同样的技术in this related question I just found .

关于iOS 标签的文本属性在 Parse 查询后没有更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27772621/

相关文章:

ios - SCRecorder:如何从本地视频创建SCRecordSession

objective-c - IOS:使用自定义表格 View 单元格重新加载表格 View

objective-c - 贝塞尔路径看是否交叉

ios - filterContentForSearchText 不在 UITableView 上显示数据

android - 发送到 Android 设备的额外推送通知

ios - 无法从 ParseUI 中删除“关闭”和“注册”按钮

javascript - 云代码相关的异步操作

ios - 使用单个数组内容在 3 个 UIButton 中随机显示图像

ios - GPU图像视频录制

ios - 为 UIButton 设置多个自定义参数