我有一个有问题的功能。下一行似乎需要延迟才能准确处理正在处理的任何数据,但没有花那么多时间,结果我得到了错误的结果。以下行:
self.failure = failure
似乎需要大约5-7秒才能执行,但是问题是,下一行代码要先执行才能完成。
我需要以以下方式设置self.failure = failure
:一旦该行结束,函数中的其余代码将在完成块内执行。我只是不确定该怎么做。
我已经尝试为完成块创建typedef,但是我不知道如何以及在何处执行它。
- (void)start:(BMPlaybackStartupProcessCompleteBlock)completion
failure:(BMPlaybackStartupProcessFailureBlock)failure // what is the error code at the start and end of this method?
{
NSParameterAssert(completion);
NSParameterAssert(failure);
self.completion = completion;
self.failure = failure;
NSOperation *jailBreakOperation = [self jailBreakCheckOperation];
NSOperation *metadata = [self metadataOperation];
NSOperation *ads = [self adsOperation];
NSOperation *mediaPlayer = [self mediaPlayerOperation];
NSOperation *progress = [self progressTrackerOperation];
NSOperation *final = [self finalOperation];
[final addDependency:mediaPlayer];
[final addDependency:progress];
if (ads)
{
[final addDependency:ads];
[ads addDependency:metadata];
}
[mediaPlayer addDependency:metadata];
[progress addDependency:metadata];
[metadata addDependency:jailBreakOperation];
[self.queue addOperation:final];
if (ads)
{
[self.queue addOperation:ads];
}
[self.queue addOperation:mediaPlayer];
[self.queue addOperation:progress];
[self.queue addOperation:metadata];
[self.queue addOperation:jailBreakOperation];
// INPUTS:
// - content ID
// - metadata component
// - media player component
// - ads component
// - location manager if required
// - auto play?
// OUTPUTS:
// - Possibly an error if not successful
// - metadata
// - playback details
}
我希望self.failure = failure
在NSOperationQueue东西执行之前完成。
NSOperation具有completionBlock属性。
@property(copy) void (^completionBlock)(void);
因此您可以执行这样的操作。如果发生,这将处理失败。
Create `error` block level property to save error while operation.
nsOperatorObject.completionBlock(^{
if (self.error) {
self.failure();
} else {
self.completion();
}
});
这可能是错误的答案。抱歉:)