![](/img/trans.png)
[英]Objective-C - Wait for call on another thread to return before continuing
[英]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.