use*_*963 1 macos cocoa objective-c grand-central-dispatch
我想在dispatch_group_notify完成后得到一个布尔值。不幸的是,以下代码是错误的,我不知道如何执行...编译器告诉我“将'BOOL'(^)(void)'传递给类型'dispatch_block_t'(aka' void(^)(void ^))“有什么想法吗?
-(BOOL)saveToDB:(NSArray*)data{
// execute async the saveJSONDictionary
__block BOOL toReturn;
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_queue_create("saveJsonDictionary", 0);
dispatch_group_async(group, queue, ^{
for (int i = 0; i < [data count]; ++i) {
NSDictionary* item = (NSDictionary*)[data objectAtIndex:i];
[self saveJsonDictionary:item];
}
NSManagedObjectContext *moc = [[DatabaseManager sharedManager]managedObjectContext];
toReturn = [moc save:nil];
});
dispatch_group_notify(group, queue, ^BOOL{
return toReturn;
});
Run Code Online (Sandbox Code Playgroud)
}
首先,没有理由创建仅分配单个块的新队列。将其扔到现有的全局队列之一上,并完成此任务。
其次,您需要在该代码块的末尾执行以下操作:
....
BOOL success = [moc save:nil];
dispatch_async(dispatch_get_main_queue(), ^{
if (success)
[someObjectThatCares theSaveIsAllDoneThanksAndComeAgain];
else
[someObjectThatCares saveFailedGetOutAndDoNotComeBackUntilYouGetItRight];
});
Run Code Online (Sandbox Code Playgroud)
也就是说,无需使用任何复杂的机制。只需在代码块的末尾添加一些代码,即可调用一些可以响应保存完成这一事实的方法。
| 归档时间: |
|
| 查看次数: |
1437 次 |
| 最近记录: |