大佬教程收集整理的这篇文章主要介绍了在 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
解决这个问题的好方法是什么?我试着把它分解成:
找到一种存储注释的好方法——考虑到第 2 点和(特别是)第 3 点,GeoJsON 可能并不理想?我应该查看数据库设置吗?
使用数据库中的所有注释填充 tableVIEw
,第一个 tableVIEw
显示所有国家/地区,然后点击一行连接到另一个 tableVIEw
,其中包含所有状态国家,另一个转入第三个 tableVIEw
,每个注释都在该州。
让用户将选定的注释标记为收藏,并仅使用标记为收藏的注释填充新的 tableVIEw
。
在我回答这个问题之前,我想指出在地图上显示 1000 个 MKAnnotationView
本身也是一个完整的问题,您可能需要考虑使用 dequeueReusableAnnotationViewWithIdentifier:
方法或 {{ 1}} 用于这些注释以避免屏幕延迟。
现在回答您实际提出的问题,而不是考虑如何在您的应用中为一项功能存储数据。进一步考虑如何为整个应用本身存储数据。
https://www.iosapptemplates.com/blog/ios-development/data-persistence-ios-swift - 此链接讨论了持久数据存储的各种选项及其优点/缺点。正如您所说,您目前正在学习 iOS 课程我建议使用 CoreData,因为它是一个本地 IOS 特定框架,可以很好地补充您的学习,并且可能会被 Udemy 覆盖。另一个原因是 CoreData 易于设置和学习,有大量来自 Apple 的文档,因此对于“新手”来说应该是一个良好的开端。
CoreData 示例
创建模型
创建一个 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,请注明来意。