У меня есть класс, который наследуется от NSManagedObject
, а также соответствует MKAnnotation
.Код прекрасно работает на всех моделях iPhone до iPhone X. Но на iPhone Xs (X / XR / XS) код вылетает сразу после добавления аннотаций к mapView
.И после двух дней отладки я понял, что все работает нормально, если я наследую от NSObject
.Тем не менее, этот класс - мой основной класс, и он используется во многих местах, поэтому, если возможно, я бы хотел избежать внесения в него огромных изменений.
Также хотелось бы знать, что ПОЧЕМУ MKMapView
вызывает сбой приложения на новых устройствах.
Ниже приведен упрощенный версия класса.* ПРИМЕЧАНИЕ: эта упрощенная версия также дает сбой !!
import Foundation
import CoreData
@objc(TestLead)
class TestLead: NSManagedObject, MKAnnotation {
@NSManaged public var dateModified: Date?
@NSManaged public var localId: String?
@NSManaged public var serverId: String?
@NSManaged public var visibleCreated: Date?
@NSManaged public var visibleModified: Date?
init(context: NSManagedObjectContext, batch: Bool = false) {
// create entity and insert into context
let entity = type(of: self).entity(in: context)!
super.init(entity: entity, insertInto: context)
// provide random values for testing purposes
self.localId = UUID().uuidString
let date = Date()
self.visibleCreated = date
self.visibleModified = date
self.dateModified = date
}
// MARK: MKAnnotation (Required by SRQuadTreeAnnotation)
@objc
public var coordinate: CLLocationCoordinate2D {
get { return CLLocationCoordinate2D(latitude: 0, longitude: 0) }
}
/// Title to be shown in the callout for the annotation
@objc
public var title: String? { return "Test Lead" }
}
// MapViewController class
import Foundation
import MapKit
class MapViewController: UIViewController, MKMapViewDelegate {
@IBOutlet weak var mapView: MKMapView
override func viewDidLoad() {
super.viewDidLoad()
// Create a test annotation
var allAnnotations: [MKAnnotation] = []
let lead = TestLead(context: ManagedDocState.mainContext, batch: false)
// add test annotation to our array of annotations
allAnnotations.append(lead)
// ->> crash happens on this line
self.mapView.addAnnotations(allAnnotations)
}
}
Высоко ценится понимание того, почему это происходит, и, возможно, как это может быть легко * разрешено .