- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试将 MKMapItem 保存为我的自定义类的一部分。
import UIKit
import MapKit
class Place: NSObject, NSCoding {
var mapItem : MKMapItem!
var type : Category!
init(mapItem: MKMapItem, type: Category) {
self.mapItem = mapItem
self.type = type
}
// MARK: NSCoding
required init?(coder decoder: NSCoder) {
mapItem = decoder.decodeObject(forKey: "mapItem") as! MKMapItem?
type = decoder.decodeObject(forKey: "type") as! Category?
}
func encode(with coder: NSCoder) {
coder.encode(mapItem, forKey: "mapItem")
coder.encode(type, forKey: "type")
}
}
但这不起作用,因为 MKMapItem 不符合 NSCoding 标准(但编译器不会提示)。我确实了解如何对自定义类进行编码,但不知道如何对 iOS 已定义的对象进行编码。
我知道 Objective-C 对此有一个答案,但我真的很想要一个 Swift 解决方案。谢谢。
PS 我尝试对 MKMapItem 进行子类化并提供"new"初始化程序,尽管这会在其他地方进行大量代码更改。但这会导致“无法分配给属性:‘地标’是仅获取属性”。 “placemark”和“isCurrentLocation”都是仅获取的。
import UIKit
import MapKit
class NewMapItem: MKMapItem {
required init(placemark: MKPlacemark, isCurrentLocation:Bool, name: String, phoneNumber: String, url: URL, timeZone: TimeZone) {
self.placemark = placemark //compiler complains "get-only"
self.isCurrentLocation = isCurrentLocation //compiler complains "get-only"
self.name = name
self.phoneNumber = phoneNumber
self.url = url
self.timeZone = timeZone
}
// MARK: NSCoding
init?(coder decoder: NSCoder) {
placemark = (decoder.decodeObject(forKey: "placemark") as! MKPlacemark?)! //compiler complains "get-only"
isCurrentLocation = decoder.decodeBool(forKey: "isCurrentLocation") //compiler complains "get-only"
name = decoder.decodeObject(forKey: "name") as? String
phoneNumber = decoder.decodeObject(forKey: "phoneNumber") as? String
url = decoder.decodeObject(forKey: "url") as! URL?
timeZone = decoder.decodeObject(forKey: "timeZone") as! TimeZone?
}
func encode(with coder: NSCoder) {
coder.encode(placemark, forKey: "placemark")
coder.encode(isCurrentLocation, forKey: "isCurrentLocation")
coder.encode(name, forKey: "name")
coder.encode(phoneNumber, forKey: "phoneNumber")
coder.encode(url, forKey: "url")
coder.encode(timeZone, forKey: "timeZone")
}
}
最佳答案
我已经弄清楚了。
分解“func编码(带有编码器:NSCoder)”中的mapItem并在“init?(编码器解码器:NSCoder)”中再次构建它
我确实利用了带有地标的 MKMapItem 初始值设定项。
MKMapItem(placemark: placemark!)
这是我的 worker 类(Class):
import UIKit
import MapKit
class Place: NSObject, NSCoding {
var mapItem : MKMapItem!
var type : Category!
init(mapItem: MKMapItem, type: Category) {
self.mapItem = mapItem
self.type = type
}
// MARK: NSCoding
required init?(coder decoder: NSCoder) {
//liberate the properties of mapItem and rebuild it
// let isCurrentLocation = decoder.decodeObject(forKey: "isCurrentLocation") as! Bool //don't need set already
let name = decoder.decodeObject(forKey: "name") as! String?
let phoneNumber = decoder.decodeObject(forKey: "phoneNumber") as! String?
let url = decoder.decodeObject(forKey: "url") as! URL?
let timeZone = decoder.decodeObject(forKey: "timeZone") as! TimeZone?
let placemark = decoder.decodeObject(forKey: "placemark") as! MKPlacemark?
self.mapItem = MKMapItem(placemark: placemark!)
self.mapItem.name = name
self.mapItem.url = url
self.mapItem.phoneNumber = phoneNumber
//self.mapItem.isCurrentLocation = isCurrentLocation //don't need this. Set already
self.mapItem.timeZone = timeZone
type = decoder.decodeObject(forKey: "type") as! Category?
}
func encode(with coder: NSCoder) {
let placemark = mapItem.placemark
let name = mapItem.name
let phoneNumber = mapItem.phoneNumber
let url = mapItem.url
let timeZone = mapItem.timeZone
coder.encode(name, forKey: "name")
coder.encode(phoneNumber,forKey: "phoneNumber")
coder.encode(url, forKey: "url")
coder.encode(timeZone, forKey: "timeZone")
coder.encode(type, forKey: "type")
coder.encode(placemark, forKey: "placemark")
}
}
关于swift - 不兼容对象的 NSCoding (MKMapItem),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40442008/
MKPlacemark *placemark1 = [[MKPlacemark alloc] initWithPlacemark:mapItem1.placemark]; MKMapItem *ite
我正在尝试执行MKLocalSearch.Request()并在我的mapView上显示结果,类似于this tutorial但是,当我进行搜索时,返回的坐标偏离了应有的中心位置。如果 map 正确地
我正在使用 MapKit 进行本地搜索,该搜索返回一个或多个 MKMapItem 对象。但是我在调试器中可以看到该对象的一些成员,但我无法访问。我特别需要的是UID。 我试过 item.place
有人可以帮我理解我需要添加什么来获取用户位置和地标之间的距离吗?我只是不确定要更改 distanceLabel.text 中的内容以使每个地标的数字发生变化。谢谢! import UIKit impo
尝试将 MKMapItem 保存为我的自定义类的一部分。 import UIKit import MapKit class Place: NSObject, NSCoding { var ma
我有一个 MKMapItems 数组,我正在尝试找到可以插入边界区域的坐标,这将使包含所有 MKMapItems 的 map 放大最大 这些 map 项中的每一个都有坐标,因此通过一些简单的边界计算就
如何在 UserDefaults 的帮助下保存和检索 MKMapItem 数组? var recentDestination: [MKMapItem] = [] 最佳答案 由于MKMapItem 符合
尝试打开 Apple map 获取路线时,出现错误“无法将‘NSKVONotifying_MKPointAnnotation’类型的值转换为‘MKMapItem’”。我是这方面的新手,我一直在拼凑代码
如何在 Swift 中将 MKMapItem 转换为 CLPlacemark? 我的代码给我一个编译器错误 'MKMapItem' is not convertible to 'CLPlacemark
我正在编写一个使用 MapKit 的应用程序。我已经实现了 MKLocalSearch,并且得到了一组 MKMapItem。但是我想知道是否有可能获得每个项目的类别。例如,在 map 应用程序中,商店
如何启动 iOS6 的默认 map 应用程序并将其传递给自定义位置? 例如: [[MKMapItem setLocation:MyLocation] openInMapsWithLaunchOptio
MKAnnotation 和 MKMapItem 之间有什么区别? 当我想在 map 上显示一些有趣的地点时,应该使用哪一个? 我有一个对象列表,其中包含纬度、经度、标题、描述和照片 到目前为止,我希
MKAnnotation 有什么区别?和 MKMapItem ? 当我想在我的 map 上显示一些有趣的地方时使用哪个? 我有一个包含 latitude 的对象列表, longitude , titl
let geocoder = CLGeocoder() let sel = parkAnnotation.getLocation() let location = CLL
我有一个 SearchBar,它给出的名称打印在 TableView 中搜索的名称。在添加搜索的键之前,我正在检查我的数据库是否获得了变量。如果我的数据库得到它,我会在 TableView 中添加搜索
我正在做一个 Core Data 项目,早期我发现 MKMapItems 不符合 NSCoder,所以我存储 MKMapItem s 的坐标在核心数据中加倍,稍后检索它们以生成到目的地的方向。 我在下
这是我的场景:我需要准时获取用户的当前位置,以便在 MKMapView 中向他们显示一组附近的兴趣点。我不需要跟踪用户的位置。我需要有人澄清最好的方法应该是: 1) ASFAIK,是否可以通过调用 m
使用 MKLocalSearchRequest() 我得到一个 MKMapItem 数组。 我只需要项目的纬度和经度。看起来应该很容易。 let search = MKLocalSearch(requ
我得到了 MKLocalSearch 的结果,它包括类似... { address = { formattedAddressLine = (
我想访问 MKMapItem 中的数据目的。搜索资料后,我正在问社区。根据 Apple class reference,有这些属性: 地标 是当前位置 姓名 电话号码 网址 如果我记录 MKMapIt
我是一名优秀的程序员,十分优秀!