У нас есть singleton WebService, который обрабатывает все наши вызовы API. Все работает отлично, если у нас не сразу есть несколько вызовов API из разных ViewControllers.Как обработчик завершения может вернуться к неправильному ViewController?
- ППГ посылает запрос
- VCB посылает Заявка В
- ответ Б возвращается VCB
- Ответа возвращается в СВУ - это вызывает исключение
WebService:
typealias ServiceResponse = (NSDictionary!, NSError!) ->()
class WebService: NSObject {
var serviceResponse : ServiceResponse!
class var sharedInstance:WebService {
struct Singleton {
static let instance = WebService()
}
return Singleton.instance
}
func callWebserviceWith(paramsDict: NSDictionary, sendAccessToken: Bool, onCompletion: ServiceResponse) -> Void {
serviceResponse = onCompletion
Как это может случиться?
* "это вызывает исключение" * - какого рода? Наличие * любого * состояния, запоминаемого в любом синглтоне, является очень-очень-очень-очень плохой идеей. Мне не нужно объяснять это больше, потому что вы создали здесь главный пример! 'serviceResponse = onCompletion', безусловно, вызовет у вас массу проблем. Что вы ожидаете, когда звонки в «callWebserviceWith» происходят близко друг к другу? – luk2302
Почему бы не использовать другой экземпляр для каждого ViewController? – 4oby
@ luk2302 Uhu yep, мы унаследовали этот код, и я пытаюсь понять, почему этот шаблон дизайна был выбран и каким может быть лучший подход к переходу. Исключение просто вызвано тем, что данные ответа не являются правильной структурой. – Leon