等待从另一个类开始的线程 - Objective C

时间:2014-10-03 11:15:52

标签: ios objective-c

我遇到了无法解决的线程问题。我想在某个类的单独线程上执行大约12000个对象的大型Core Data保存操作,而在另一个类中控制与完成的保存操作相关的按钮操作。对此最好的方法是什么?

这是保存操作的样子:

     Class A

    -(void) saveAsync
    {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
                       {
                           //arrayOfObjects holds the 12000 objects

                           for(aClass *object in arrayOfObjects)
                           {
                               [self saveToCoreData: object];
                           }

                           NSLog(@"Finished saving");

                       });
    }

    -(void) saveToCoreData : (aClass *) object
    {
        //perform save operation here
    }

这是我按钮上的动作方法(实际上还没有)

    Class B

    -(IBAction) buttonActionMethod
    {
        //take different actions depending on the objects being persisted to the store or still saving
    }

我要求一个解决方案,让我知道对象是否按下按钮保存。我提供的代码只是一个表达这个想法的原始示例,我不希望它像那样工作。我曾想过使用NSOperationQueue或创建线程或使用组,但我找不到一个有效的解决方案。

提前谢谢!

2 个答案:

答案 0 :(得分:0)

您需要在A类上存储BOOL,它将指示保存状态,
并检查来自B类的BOOL,并采取不同的行动。

 >> Class A

 @property (atomic) BOOL isSaving;

- (void)saveAsync
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^ {
        //arrayOfObjects holds the 12000 objects
        self.isSaving = YES;
        for(aClass *object in arrayOfObjects) {
            [self saveToCoreData:object];
        }
        self.isSaving = NO;
        NSLog(@"Finished saving");
    });
}

- (void)saveToCoreData:(aClass *)object
{
    //perform save operation here
}



>> Class B

- (IBAction)buttonActionMethod
{
    // take different actions depending on the objects being persisted to the store or still saving
    if (classA.isSaving) {
    } else {
    }
}

答案 1 :(得分:0)

您可以订阅NSManagedObjectContextDidSaveNotification

  

每当托管对象上下文完成保存操作时都会发布。

     

通知对象是托管对象上下文。 userInfo   dictionary包含以下键:NSInsertedObjectsKey,   NSUpdatedObjectsKey和NSDeletedObjectsKey。

我强烈建议不要使用任何类变量,因为它们存储的类状态不是它的真正部分