gpt4 book ai didi

ios - 当方法需要很长时间才能完成时如何避免多次调用方法

转载 作者:行者123 更新时间:2023-12-01 16:44:29 24 4
gpt4 key购买 nike

我的应用程序中有几个 View Controller ,我需要使用在后台线程中运行的方法将本地内容与服务器同步。如果用户创建了任何数据,有时我需要将数据插入服务器上的数据库。我在这里使用的方法是在我需要与服务器同步的对象上设置一个标志(类似于 isSynced = NO)(Core Data 中有对象)。同步完成后,我的方法将删除该标志(例如 isSynced = YES),因此下次不会再次发送。

现在的问题是同步方法需要很长时间才能完成(1 或 2 秒。)。如果现在用户弹出这个特定的 View Controller 并迅速返回,上一个调用仍在进行中,下一个调用将被启动。结果是数据库中可能存在重复。

我现在的方法是让 Singleton 对象调用同步方法:


@property (nonatomic) BOOL isSyncing;

//every time before syncing. check if object is available for syncing

if (!isSyncing) {

isSyncing = YES;
// sync server

// when complete
isSyncing = NO;

// post notification to view controller to reload table

} else {

// cancel because previous call is not finished

}


我担心的是,如果取消调用,我的 View Controller 将无法接收正在等待的通知。如果取消,我可以通过发布另一个通知来解决此问题。我想知道这样做是否正确,因为我认为这个问题在 iOS 开发中应该很常见,应该有一个标准的方法来处理它

最佳答案

您的单例方法可能不是必需的。我没有看到为每个新对象发送数据库插入的危害。您仍然需要确保每个对象都是同步的。也就是说,更新“isSynched”标志。将每个需要同步的对象保存在“需要同步”列表中。

然后,通过对数据库执行后台查询来更新“isSynced”标志,以检查对象是否存在。然后,使用查询结果设置 isSynced 标志。

如果查询结果表明对象不在数据库中,则重新发送对象并将其“isSynced”标志设置为 NO。

如果查询结果表明对象在数据库中,请将“isSynced”标志设置为 YES 并将其从“需要同步”列表中删除。

防止重复数据库条目的一种方法是创建唯一键。例如,使用基于时间和日期的哈希标记每个。然后配置表以确保每个键都是唯一的。

关于ios - 当方法需要很长时间才能完成时如何避免多次调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21075857/

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