【发布时间】:2015-07-08 02:34:27
【问题描述】:
如果这个问题已经得到解答,我提前道歉,但正如你可能从标题中看出的那样,我不太确定如何描述这个问题,并且对我发现的类似问题的回答没有帮助。
我正在尝试创建一个“优惠券”实例,该实例在将 ID 传递给 init 方法中的数据库后,其属性从 SQL 数据库中加载。
我的问题是,当我从不同的 viewController 类调用 init 方法时,它将返回具有默认字符串值“”的实例,因为来自 NSURLConnection 的数据在返回到 viewContoller 之前尚未/解码。
我正在寻找一种解决方案,以解决如何让 init 方法等到字段加载完成。
优惠券类相关属性:
var webData: NSMutableData?
var id: Int
var name: String = ""
var provider: String = ""
var details: String = ""
优惠券类相关方法:
convenience init(id: Int) {
self.init()
self.id = id
self.selectSQL(id) //passes id to server and returns all other varibles
}
func selectSQL(id: Int) {
let url = NSURL(string: "http://wwww.website.php?id=\(id)") // acess php page
let urlRequest = NSURLRequest(URL: url!)
let connection = NSURLConnection(request: urlRequest, delegate: self)
}
func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse) {
webData = NSMutableData()
}
func connection(connection: NSURLConnection, didReceiveData data: NSData) {
webData?.appendData(data)
}
func connectionDidFinishLoading(connection: NSURLConnection) {
let result = NSJSONSerialization.JSONObjectWithData(webData!, options: .AllowFragments, error: nil) as? NSArray
let resultDict = result?[0] as? NSDictionary
if let dict = resultDict {
name = dict.objectForKey("name") as! String
provider = dict.objectForKey("provider") as! String
details = dict.objectForKey("details") as! String
}
【问题讨论】: