Быстрое объединение свойств наследования выдает «Фатальная ошибка: вызов удаленного метода» в Xcode 11.4 beta 2 / iOS 13.4 - PullRequest
7 голосов
/ 29 февраля 2020

Я пытаюсь использовать Swift Combine для получения измененного события свойства.

У меня есть этот класс, который публикует sh свойство isLogged

class CurrentUser: Account {
    static let me = CurrentUser() //Singleton 

    @Published var isLogged: Bool = false

}

, которое наследовать от этого другого класса, который публикует sh свойство profileImageVersion

class Account {

    @Published var profileImageVersion: String?

    init(){
       self.profileImageVersion = ""
    }
}

Я пытаюсь подписаться на опубликованное свойство наследования profileImageVersion, как это без успеха!

// Subscribe to account image changes
userImageChangedSubscriber = CurrentUser.me.$profileImageVersion.receive(on: DispatchQueue.main).sink(receiveValue: { (imageVersion) in           
       ...
    }
})

Ошибка Fatal error: Call of deleted method

, если, с другой стороны, я подписываюсь на свойство isLogged, все работает нормально ...

// Subscribe to logged changes
userLoggedSubscriber = CurrentUser.me.$isLogged.receive(on: DispatchQueue.main).sink(receiveValue: { (logged) in
   ...
})

Эта ошибка выбрасывается только на Xcode 11.4 beta 2 / iOS 13.4.
При использовании Xcode 11.3.1 / 13.3 все работает нормально!

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

У меня есть тот же самый cra sh на Xcode 11.4.1. Я использую «Clean Build Folder», создаю свой проект заново, и теперь все работает отлично!

0 голосов
/ 14 апреля 2020

У меня есть тот же самый cra sh, и в качестве временного решения я обнаружил, что перемещение всех ваших опубликованных свойств в конкретный класс, который вы используете, решит проблему. У меня была такая настройка:

class EpisodesViewModel {
  @Published var episodes: [Episode]

  init(fetchRequest: NSFetchRequest<Episode>, context: NSManagedObjectContext? = nil) throws {
    ...
  }
  ...
}

С подклассом этой модели, который просто дал запрос на выборку:

final class LatestEpisodesViewModel: EpisodesViewModel {
    init() throws {
        try super.init(fetchRequest: Episode.latestFetchRequest())
    }
}

Изменяя мои настройки на это, я смог исправить cra sh:

class EpisodesViewModel {
    var fetchedEpisodes: [Episode]

    init(fetchRequest: NSFetchRequest<Episode>, context: NSManagedObjectContext? = nil) throws {
        ...
    }
    ...
}

final class LatestEpisodesViewModel: EpisodesViewModel {

    @Published var episodes: [Episode] = []

    override var fetchedEpisodes: [Episode] {
        didSet {
            episodes = fetchedEpisodes
        }
    }

    init() throws {
        try super.init(fetchRequest: Episode.latestFetchRequest())
    }
}

Это, конечно, мне кажется ошибкой Apple, но тем временем я решил эту проблему.

...