Маркеры векторного слоя не отображаются в Esri ios SDK

Я использую ESRI iOS SDK 10.2.5, мое приложение было построено с использованием Swift 2.3, и теперь я преобразовал его в 3.2, все работает нормально.

но есть небольшая проблема с отображением маркеров в векторном слое, который раньше работал правильно в Swift 2.3.

сигнатура метода немного изменилась после миграции.

вот сигнатура метода для 2.3 (отлично работает):

func featureLayer(featureLayer: AGSFeatureLayer!, operation op: NSOperation!, didQueryFeaturesWithFeatureSet featureSet: AGSFeatureSet!) {

if (featureLayer == self.featureLayer) {

   // featureset has more than 1 element
    for poi in featureSet.features {

        var attr = [String: AnyObject]()
        attr["NAME"] = poi.allAttributes()[LanguageController.localizedString("poi_detail_name")] as? String;
        attr["DETAIL"] = poi.allAttributes()["PHONE_NUMBER"] as? String;
        attr["CATEGORY_EN"] = poi.allAttributes()["FACILITY_CAT_EN"] as? String;
        attr["IS_OFFICE"] = false;
        attr["IS_HDKP"] = false
        let graphic = AGSGraphic(
            geometry: poi.geometry,
            symbol: getSymbolForGraphic(poi as! AGSGraphic),
            attributes: attr)

        self.mapLayer.addGraphic(graphic);
    }

    SVProgressHUD.dismiss()
}

сигнатура метода для swift 3.2:

func featureLayer(_ featureLayer: AGSFeatureLayer!, operation op: Operation!, didQueryFeaturesWith featureSet: AGSFeatureSet!) {

if (featureLayer == self.featureLayer) {

    // problem here,featureset.feature has 0 elements
    for poi in featureSet.features {

        var attr = [String: Any]()
        attr["NAME"] = (poi as AnyObject).allAttributes()[LanguageController.localizedString("poi_detail_name")] as? String;
        attr["DETAIL"] = (poi as AnyObject).allAttributes()["PHONE_NUMBER"] as? String;
        attr["CATEGORY_EN"] = (poi as AnyObject).allAttributes()["FACILITY_CAT_EN"] as? String;
        attr["IS_OFFICE"] = false as Any
        attr["IS_HDKP"] = false as Any
        let graphic = AGSGraphic(
            geometry: (poi as AnyObject).geometry,
            symbol: getSymbolForGraphic(poi as! AGSGraphic),
            attributes: attr)

        self.mapLayer.addGraphic(graphic);
    }
    SVProgressHUD.dismiss()
}

Класс модели для управления функциями:

class POICategory: NSObject, NSCoding
{
var isActive : Bool;
var name : String;
var nameFilter : String;
var key : String;

init(isActive: Bool,name : String, nameFilter: String, key: String){
    self.isActive = isActive;
    self.name = name;
    self.nameFilter = nameFilter;
    self.key = key;
}

required init?(coder aDecoder: NSCoder) {
    self.isActive = aDecoder.decodeObject(forKey: "isActive") as? Bool
    self.name = aDecoder.decodeObject(forKey: "name") as! String
    self.nameFilter = aDecoder.decodeObject(forKey: "nameFilter") as! String
    self.key = aDecoder.decodeObject(forKey: "key") as! String
}

func encode(with aCoder: NSCoder) {
    aCoder.encode(self.isActive, forKey: "isActive")
    aCoder.encode(self.name, forKey: "name")
    aCoder.encode(self.nameFilter, forKey: "nameFilter")
    aCoder.encode(self.key, forKey: "key")

}
}

я отладил код и узнал, что featureSet.feature не имеет элементов в swift 3.2, но имеет элементы в 2.3, поэтому он не входит в цикл и не устанавливает графику на маркер

почему это происходит, так как этот метод от делегата esri ... это ошибка с их конца?

Помогите, пожалуйста, решить эту проблему, если у кого-то есть идеи по этому поводу.


person Community    schedule 07.05.2018    source источник


Ответы (1)


в переходе с 2.3 на 3.2 нет ничего плохого, единственное, что может сломаться, по моему мнению, это код в вашем классе модели

попробуйте изменить класс модели во втором инициализаторе с

self.isActive = aDecoder.decodeObject(forKey: "isActive") as? Bool

в

self.isActive = aDecoder.decodeBool(forKey: "isActive")

вы пытаетесь прочитать логическое значение, такое как объект, что может быть проблемой

person al_mukthar    schedule 07.05.2018