0

我制作了一个自定义指示器,在其中我可以通过一个块运行代码并在代码运行时显示一个指示器。

代码完成后,我调用第二个成功块并隐藏/删除指示器。

因为我不想在我想使用它们的类中实例化每个指标,所以指标对象是一个单例。

工作流程:

  1. 创建指标
  2. 显示指标
  3. 运行代码块
  4. 运行成功块
  5. 隐藏指示器
  6. 从超级视图中删除
  7. 取消共享实例

当我使用两个指标时出现问题(例如:登录后,刷新数据)。

当显示第二个指标时,在第一个实例上调用 hide 方法。在第二个指标期间,指标视图从超级视图中移除。

我没有管理自己的线程锁的经验,但我想通过使用解决问题,@synchronized(self)但似乎没有效果?

+ (Indicator *)create
{
    if (!sharedIndicator)
    {
        sharedIndicator = [[Indicator alloc] initWithNibName:@"Indicator" bundle:nil];
    }

    return sharedIndicator;
}

+ (Indicator *)createWithDelegate:(id <IndicatorDelegate>)delegate 
                             message:(NSString *)message 
                              inView:(UIView *)parentView
{
    Indicator *indicator = [Indicator create];
    [indicator setDelegate:delegate];
    [indicator setMessage:message];
    [indicator setParentView:parentView];

    return indicator;
}

+ (void)showInView:(UIView *)view 
       withMessage:(NSString *)message 
           execute:(BOOL (^)(void))executeBlock 
          complete:(void (^)(BOOL success))completed
{
    Indicator *indicator = [Indicator createWithDelegate:nil message:message inView:view];

    [indicator show];

    __block BOOL success = NO;

    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
    {    
        success = executeBlock();

        dispatch_async(dispatch_get_main_queue(), ^
        {
            completed(success);

            [indicator hide];
        });
    });
}
4

1 回答 1

0

每次显示指标时,您都会获得相同的视图,因为它与 sharedInstance 链接。

于 2013-04-06T21:14:23.487 回答