我有一種方法可以運行其他幾種方法。這些都有完成塊,我只想在我的主方法結束時返回一個值,只要我有每個子方法的結果。例如:只有準備就緒時才能返回方法?
-(NSMutableDictionary *)mainMethod
{
[self subMethod1Complete:^(NSMutableArray *results)
{
}
[self subMethod2Complete:^(NSMutableArray *results)
{
}
//return...
}
我只想在兩個子方法完成後返回字典。我怎樣才能做到這一點?
我確實有爲每種方法存儲BOOL的想法,所以我知道,不完整並且是完整的。所以當兩個都是YES時,我會返回我的字典。但我怎麼能夠按時並且不過早地打電話呢?
這是我無法解決的問題。希望你能幫忙,謝謝。
UPDATE:
我已經調整了我的代碼使用完畢塊,所以當我終於從其他方法的兩個其他完成塊接收數據,我跑最後一個編譯結果。下面你可以看到我的方法。你可以看到我的方法如下,到目前爲止還沒有成功,最終完成塊仍然過早地被調用。
對我來說很重要。 getTitles
和getThumbnails
方法。在這些完成塊中,我獲得了我需要的數據。只有當我有這兩個這些,我想打電話給我的這個主要方法的最後完成塊。因此,一旦收到標題和縮略圖,它就會傳遞。
-(void)getFeedForUserID:(NSString *)channelID delegate:(id<YTHelperDelegate>)delegate complete:(void (^)(NSMutableDictionary * result))completionBlock properties:(NSString *)element, ...
{
va_list args;
va_start(args, element);
NSMutableArray *array = [NSMutableArray new];
for (NSString *arg = element; arg != nil; arg = va_arg(args, NSString *)) [array addObject:arg];
va_end(args);
NSMutableDictionary *resultsDict = [NSMutableDictionary new];
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_group_t group = dispatch_group_create();
for (NSString *string in array)
{
if ([string isEqualToString:kFeedElementTitle])
{
dispatch_group_async(group, queue, ^{
[self getTitlesArrayForChannel:channelID completionHandler:^(NSMutableArray *results) {
dispatch_group_async(group, dispatch_get_main_queue(), ^{
[resultsDict setObject:results forKey:kFeedElementTitle];
});
}];
});
}
if ([string isEqualToString:kFeedElementTitle])
{
dispatch_group_async(group, queue, ^{
[self getThumbnailsArrayForChannel:channelID completionHandler:^(NSMutableArray *results) {
dispatch_group_async(group, dispatch_get_main_queue(), ^{
[resultsDict setObject:results forKey:kFeedElementThumbnail];
});
}];
});
}
}
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
completionBlock(resultsDict);
});
}
所以2種方法異步運行? – Wain
假設這兩個塊都已完成,您無法從該方法返回 –
更新了我的使用完成塊的方法,更合理,但仍然遇到了麻煩。不確定原因。 –