Использование NSManagedObject в качестве MKAnnotation приводит к сбою MKMapView на новых устройствах - PullRequest
0 голосов
/ 22 января 2019

У меня есть класс, который наследуется от 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)
    }
}

Высоко ценится понимание того, почему это происходит, и, возможно, как это может быть легко * разрешено .

...