0

我是 Parse 和数据库的新手,目前我很困惑。

在视图上,有 4 个按钮和一个标签。这是我的代码(对不起,它很乱):

我刚刚听说 UI 更新和操作不应该在主线程中完成,因为PFQuery不直接支持 UI。

显然,日志执行了一个错误:Warning: A long-running Parse operation is being executed on the main thread. Break on warnParseOperationOnMainThread() to debug.

我想使用块外的查询数据进行更新label.text,那么如何设置数据(值)以便可以在代码中的其他方法中使用它?

我知道这是一个非常基本的问题,但如果有人能帮助我解决这个问题,我会非常高兴。

PFQuery *query = [PFQuery queryWithClassName:@"DataClass"];

[query getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {

    if (!error) {
        NSString *getTheStr1 = object[@"A"];
        NSString *getTheStr2 = object[@"B"];
        NSString *getTheStr3 = object[@"C"];
        NSString *getTheStr4 = object[@"D"];

           //when I press a button, each shows a different text on the label.
        UIButton *button = (UIButton *)sender;
        switch ([button tag]) {
            case 1:
                Label.text = [NSString stringWithFormat:@"%@", getTheStr1];
                break;

            case 2:
                Label.text = [NSString stringWithFormat:@"%@", getTheStr2];
                break;

            case 3:
                Label.text = [NSString stringWithFormat:@"%@", getTheStr3];
                break;

            case 4:
                Label.text = [NSString stringWithFormat:@"%@", getTheStr4];
        }
    }
}];

谢谢你。

我来自上一个问题 如何同时检索多个数据?(解析数据库,iOS)

4

2 回答 2

0

反过来说:UI 只能在主线程上更新。您应该尽量避免在主线程上执行所有其他类型的长时间运行的操作(例如网络请求),以免阻塞它。

您的代码似乎没问题,有什么问题?

于 2014-05-07T13:04:27.417 回答
0

你试过 GCD 吗?

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
    dispatch_async(queue, ^{
        PFQuery *query = [PFQuery queryWithClassName:@"DataClass"];

    [query getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {

    if (!error) {
    NSString *getTheStr1 = object[@"A"];
    NSString *getTheStr2 = object[@"B"];
    NSString *getTheStr3 = object[@"C"];
    NSString *getTheStr4 = object[@"D"];

       //when I press a button, each shows a different text on the label.
    UIButton *button = (UIButton *)sender;
    switch ([button tag]) {
        case 1:
            Label.text = [NSString stringWithFormat:@"%@", getTheStr1];
            break;

        case 2:
            Label.text = [NSString stringWithFormat:@"%@", getTheStr2];
            break;

        case 3:
            Label.text = [NSString stringWithFormat:@"%@", getTheStr3];
            break;

        case 4:
            Label.text = [NSString stringWithFormat:@"%@", getTheStr4];
        }
    }
}];
});
于 2014-05-07T13:18:21.460 回答