gpt4 book ai didi

ios - 在选项卡栏中实现 iOS 角标(Badge)通知的最佳方式

转载 作者:行者123 更新时间:2023-11-30 13:59:45 25 4
gpt4 key购买 nike

一般来说,我想在数据库中查询过去 10 分钟内的所有新 FeedItem。此 Feed 应该每 10 分钟就有一批新的 FeedItem。

我写了一个函数:

func getRecentFeedItems() {
// Set up timing
let date = NSDate()
let calendar = NSCalendar.autoupdatingCurrentCalendar()
let dateMinusTenMin = calendar.dateByAddingUnit(.Minute, value: -10, toDate: date, options: [])
//Query the DB
let getRecentFeedItems = FeedItem.query()
getRecentFeedItems!.whereKey("createdAt", greaterThan: dateMinusTenMin!)
let newBadgeCount: Int = (getRecentFeedItems?.countObjects())!
if newBadgeCount > 0 {
self.navigationController?.tabBarItem.badgeValue = String(newBadgeCount) //update the Badge with the new count
print("update the badge with \(newBadgeCount)")
} else {
self.navigationController?.tabBarItem.badgeValue = nil
}
}

此函数可以更新角标(Badge)通知,但是当我设置一个计时器让它每十分钟运行一次时:

var updateBadgeQueryTimer = NSTimer.scheduledTimerWithTimeInterval(600.0, target: self, selector: Selector("updateBadgeQuery"), userInfo: nil, repeats: true)

它确实有效,但我收到以下警告,我知道这是一个严重的警告:

Warning: A long-running operation is being executed on the main thread. 

给定以下参数:

  1. 如果用户位于 FeedItems、查询运行并填充角标(Badge)的 Tab1 上,我希望角标(Badge)显示,然后在用户通过 UIRefreshControl() 重新加载提要时消失。

  2. 如果用户位于 Tab2 或其他 View 上,我希望角标(Badge)显示出来,并且仅在用户按下 Tab1 时消失。

  3. 我希望每 10 分钟运行一次新项目数量查询。

我尝试在 viewWillAppear 和 viewDidAppear() 中运行 getRecentFeedItems()。

有更好的方法吗?

最佳答案

据我所知,您唯一需要更改的是在后台运行 getRecentFeedItems,并且仅在从查询中获得成功或失败消息后才更新角标(Badge)值。这将防止主线程上发生操作的警告。

希望这有帮助!

关于ios - 在选项卡栏中实现 iOS 角标(Badge)通知的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33137156/

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