程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 tableView 中存储 1000 个 MapKit 注释 + 显示注释的最佳方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 tableView 中存储 1000 个 MapKit 注释 + 显示注释的最佳方法?

开发过程中遇到在 tableView 中存储 1000 个 MapKit 注释 + 显示注释的最佳方法的问题如何解决?下面主要结合日常开发的经验,给出你关于在 tableView 中存储 1000 个 MapKit 注释 + 显示注释的最佳方法的解决方法建议,希望对你解决在 tableView 中存储 1000 个 MapKit 注释 + 显示注释的最佳方法有所启发或帮助;

问题:存储 1000 条 MapKit 注释的最佳方法是什么,这些注释将显示在地图上并且也应该可以在 tableVIEw 中浏览?用户还应该能够将选定的注释标记为收藏夹,并将它们显示在单独的 tableVIEw 中。

背景:我正在学习 iOS 编程(通过 Udemy、Google 和 Stack Overflow)。我目前正在尝试制作一个基于 MapKit 的应用程序,该应用程序在地图上显示许多注释。每个注释代表一种特定类型的位置。出于测试目的,我制作了一个虚拟的 GeoJsON 文件(位于应用程序中,而不是在服务器上),它存储每个位置,如下所示:

 {
        "type" : "Feature","propertIEs" : {
            "location" : "norway","Title" : "Annotation Title","website" : "http://www.stackoverflow.com",},"geometry" : {
            "type" : "Point","coordinates" : [10,60]
        }
    },

这很好用;我的虚拟对象被解析并放在地图上就好了。但最终,我将拥有 1000 多个真实的注释,而不仅仅是我的一些虚拟注释。

Map View

这里是我的技能不足的地方:我希望用户能够将特定位置标记为收藏,这当然应该通过应用更新、iOS 更新以及理想情况下在用户的多个设备之间保持不变。

Favorites view

用户还应该能够浏览所有注释,按国家和州排序。

Browse view

解决这个问题的好方法是什么?我试着把它分解成:

  1. 找到一种存储注释的好方法——考虑到第 2 点和(特别是)第 3 点,GeoJsON 可能并不理想?我应该查看数据库设置吗?

  2. 使用数据库中的所有注释填充 tableVIEw,第一个 tableVIEw 显示所有国家/地区,然后点击一行连接到另一个 tableVIEw,其中包含所有状态国家,另一个转入第三个 tableVIEw,每个注释都在该州。

  3. 让用户将选定的注释标记为收藏,并仅使用标记为收藏的注释填充新的 tableVIEw

解决方法

在我回答这个问题之前,我想指出在地图上显示 1000 个 MKAnnotationView 本身也是一个完整的问题,您可能需要考虑使用 dequeueReusableAnnotationViewWithIdentifier: 方法或 {{ 1}} 用于这些注释以避免屏幕延迟。

现在回答您实际提出的问题,而不是考虑如何在您的应用中为一项功能存储数据。进一步考虑如何为整个应用本身存储数据。

https://www.iosapptemplates.com/blog/ios-development/data-persistence-ios-swift - 此链接讨论了持久数据存储的各种选项及其优点/缺点。正如您所说,您目前正在学习 iOS 课程我建议使用 CoreData,因为它是一个本地 IOS 特定框架,可以很好地补充您的学习,并且可能会被 Udemy 覆盖。另一个原因是 CoreData 易于设置和学习,有大量来自 Apple 的文档,因此对于“新手”来说应该是一个良好的开端。

CoreData 示例

创建模型

在 tableView 中存储 1000 个 MapKit 注释 + 显示注释的最佳方法

创建一个 CoreData 管理器

MKClusterAnnotation

加载药丸数组

class CoreDataManager {
static let shared = CoreDataManager()
private init() {}
private lazy var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "PillReminder")
    container.loadPersistentStores(completionHandler: { _,error in
        _ = error.map { fatalError("Unresolved error \($0)") }
    })
    return container
}()

var mainContext: NSManagedObjectContext {
    return persistentContainer.viewContext
}

func backgroundContext() -> NSManagedObjectContext {
    return persistentContainer.newBackgroundContext()
}

保存一个新的 Pill 实体

func loadPills() -> [Pill] {
let mainContext = CoreDataManager.shared.mainContext
let fetchRequest: NSFetchRequest<Pill> = Pill.fetchRequest()
do {
    let results = try mainContext.fetch(fetchRequest)
    return results
}
catch {
    debugPrint(error)
}

}

大佬总结

以上是大佬教程为你收集整理的在 tableView 中存储 1000 个 MapKit 注释 + 显示注释的最佳方法全部内容,希望文章能够帮你解决在 tableView 中存储 1000 个 MapKit 注释 + 显示注释的最佳方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: