在我的应用中,我有一个类似功能,其中显示的用户喜欢您的个人资料。因为当其他用户喜欢他时,用户会收到推送通知,所以我决定创建一个单身ENFeedLikeManager
来存储我喜欢的数组,并在收到通知时添加对象:
ENFeedLikeManager.swift
let ENFeedLikeInstance = ENFeedLikeManager.sharedInstance
class ENFeedLikeManager: NSObject {
var likeViewController: ENLikeViewController?
var likes = [ENFeedLike]()
static let sharedInstance = ENFeedLikeManager()
override init() {
super.init()
}
func addNotificationLike(like: ENFeedLike) {
guard let likeViewController = likeViewController else {
return
}
likes.insert(like, at: 0)
likeViewController.likeTableView.insertRows(at: [IndexPath.init(row: 0, section: 0)], with: .automatic)
}
}
当应用程序启动时,我从服务器获取相似的数据,然后将结果存储在ENFeedLikeInstance.likes中,我将从此数组中进行操作,以进一步操作,例如显示tableView ...
AppDelegate.swift(application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
当它是一个新的通知时)
let newLikeData = parseLikeNotification(notification: dataDict)
if let user = newLikeData {
ENFeedLikeInstance.addNotificationLike(like: user)
}
我担心通过使用这种单身,我有一些去初始化的问题。
你有什么建议可以做到吗?
答案 0 :(得分:0)
你确实会遇到问题。 应该在服务器端处理/存储这些类型的东西,然后每次需要显示类似的列表时通过请求检索。 如果你真的想在本地存储它们,那么就不能使用单例,因为每次你的应用程序退出时,你的单例都会随着其中的一切而消失。你应该把它存储在:
如果你真的想使用单身人士,那么你需要在每次初始化时发出请求以从服务器中获取喜欢的列表。
注意: 如果您选择在本地存储数据,则可能会出现问题,特别是对于可能经常更改的类似列表,您最终可能会得到一个不是最新的列表。
编辑: 现在我理解你的担忧。所以,在单身人士中管理控制器的逻辑是不好的做法。如果你想按照自己的方式行事(最后并没有那么糟糕,但要小心,我不会在很大程度上依赖通知来显示正确的列表,他们很多情况下都没有收到通知),你的单身人士应该只保持更新类似的列表,并通知您的控制器有关该列表所做的任何更改。然后你的控制器将更新tableview。
所以tableview的所有逻辑都应该放在你的控制器中。您可以创建一个委托,您的控制器将响应该委托的协议。
你最终会得到类似的东西:
let ENFeedLikeInstance = ENFeedLikeManager.sharedInstance
protocol ENFeedLikeManagerDelegate: class {
func didUpdateLikeList(_ list: [ENFeedLike])
}
class ENFeedLikeManager: NSObject {
weak var delegate: ENFeedLikeManagerDelegate?
var likes = [ENFeedLike]() {
didSet {
delegate?. didUpdateLikeList(likes)
}
}
static let sharedInstance = ENFeedLikeManager()
override init() {
super.init()
}
func addNotificationLike(like: ENFeedLike) {
guard let likeViewController = likeViewController else {
return
}
likes.insert(like, at: 0)
}
}
然后你只需要在你的控制器中使用那个委托:
extension yourViewController: ENFeedLikeManagerDelegate {
func didUpdateLikeList(_ list: [ENFeedLike]) {
// update your tableview here with the new list of like
}
}