我有一个自定义的委托/协议设置。我使用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 {
}
}
}
}
所有这一切工作正常 - 预期print语句在getGallery()函数打印出每个URL。就在它调用委托时,它永远不会将对象传递回视图控制器。并且设置断点表明它永远不会传回数据。
我在代表/协议的其他项目中使用过这个完全相同的模式,并且从来没有遇到过问题。任何想法为什么它没有被召唤?
何时何地你叫'getGallery'?调用'loadCats()'时它是否被视图控制器调用? –
您正在创建ImgurAPIManager的新实例并将其委托给它。请使用您的sharedInstance设置委托或使您的委托保持静态。 –
@Roman yes loadCats()调用get gallery方法,但DanBeaulieu已经正确回答。 ImgurAPIManager.sharedInstance.delegate = self是正确的。把它放在答案中,我会接受它。 – joey