我有一个运行良好的 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/