gpt4 book ai didi

ios - NSOperation 和 NSOperationQueue

转载 作者:行者123 更新时间:2023-11-29 13:03:35 25 4
gpt4 key购买 nike

我同时从服务器下载一些信息,我正在使用 NSOperatioQueue 进行相同的操作。我有一个问题。例如,如果下载操作由于某种原因失败,我不想从队列中删除该操作。

现在,即使它在从服务器收到响应后立即失败,操作也会从队列中删除。

有什么方法可以告诉队列某个特定操作在逻辑上没有完成并且应该将其保留在队列中?

就我而言,我正在下载一组信息。例如获取一个县的所有地方,然后获取每个县的所有房屋。因此,在某些情况下,如果用户未使用有效 token 登录,则无法下载县。在这种情况下,服务器会返回一条失败消息。我想将这些项目保留在队列中,以便在用户登录应用程序时重试。

示例代码

self.downloadQueue.maxConcurrentOperationCount = 1;
for(Campaign *campaign in campaigns)
{
isContentUpdated = false;
if(self.operation)
self.operation = Nil;
self.operation = [[DownloadOutlets alloc] initWithCampaign:campaign];
[self.downloadQueue addOperation:operation];
}

其中 downloadQueue 是一个 NSOperationQueue,而 DownloadOutlets 扩展了 NSOperation。谢谢

最佳答案

您不应该将失败的操作保留在队列中。失败的操作已执行其任务。你应该让你的操作 Controller 通过 completionBlock 或其他方式监听操作的状态,并决定下一步做什么。如果确定操作失败但应重试类似操作,则应添加另一个操作以再次执行任务。

另一种方法是在操作中重试下载直到成功,然后才结束操作。然而,这不是最佳设计,因为该操作没有也不应该拥有决定是否重试、通知用户等所需的所有信息。

关于ios - NSOperation 和 NSOperationQueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19184837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com