У меня есть настраиваемая настройка делегата/протокола. Я использую alamofire для запроса запроса, а затем разбираю json. Json помещается в объекты Swift и возвращается обратно в контроллер представления коллекции. За исключением того, что делегат, чтобы отправить их обратно, никогда не будет вызван. Все остальное прекрасно работает. Вот мой соответствующий код:Делегат не вызван
class ViewController: UICollectionViewController, MainCatGallery {
var cats = [Cats]()
let theManager = ImgurAPIManager()
override func viewDidLoad() {
super.viewDidLoad()
loadCats()
theManager.delegate = self
}
func gotCatsArray(x: [Cats]) {
self.cats = x
self.collectionView?.reloadData()
}
}
и:
protocol MainCatGallery {
func gotCatsArray(x: [Cats])
}
class ImgurAPIManager: NSObject {
static let sharedInstance = ImgurAPIManager()
let jsonClass = ParseJson()
var delegate:MainCatGallery?
var catGallery = [Cats]()
func getGallery() {
Alamofire.request(Router.Get)
.response { (request, response, data, error) -> Void in
do {
let jsonDict = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
self.catGallery = self.jsonClass.parseCatGalleryJson(jsonDict)
for x in self.catGallery {
print(x.url!)
}
self.delegate?.gotCatsArray(self.catGallery)
}
catch {
}
}
}
}
Все это работает отлично - оператор печати в getGallery() функция печатает каждый URL, как и ожидалось. Просто, когда идет вызов делегата, он никогда не передает объекты обратно в контроллер представления. И установка контрольных точек показывает, что он никогда не передает данные назад.
Я использовал этот точный шаблон раньше в других проектах для делегатов/протоколов и никогда не испытывал проблем. Любые идеи, почему его не называют?
Где и когда вы называете 'getGallery'? Вызывается ли он контроллером вида, когда он вызывает 'loadCats()'? –
Вы создаете новый экземпляр ImgurAPIManager и назначаете ему делегат. Либо используйте sharedInstance, чтобы установить делегат или сделать свой делегат статичным. –
@Roman yes loadCats() вызывает метод get gallery, но DanBeaulieu ответил правильно. ImgurAPIManager.sharedInstance.delegate = self является правильным. ответьте, и я приму это. – joey