簡體   English   中英

等待從另一個類開始的線程-目標C

[英]Wait on thread started from another class - 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或創建線程或使用組,但是我還沒有找到一種可行的解決方案。

先感謝您!

您需要將BOOL存儲在Class A上,這將指示保存狀態,
並檢查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 {
    }
}

您可以訂閱NSManagedObjectContextDidSaveNotification

每當托管對象上下文完成保存操作時就發布。

通知對象是托管對象上下文。 userInfo詞典包含以下鍵:NSInsertedObjectsKey,NSUpdatedObjectsKey和NSDeletedObjectsKey。

我強烈建議不要使用任何類變量,因為它們存儲的不是類的真正狀態

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM