這看起來很明顯,但我很絆倒如何在swift中處理成員變量的內存。 這裏是一個示例代碼 -在swift viewcontroller中跨越調用的成員變量內存
class TwitMeTableViewController: UITableViewController{
var userTweets:[AnyObject]!{
didSet{
print("?? TweetCount is \(userTweets.count)??") // 3
updateUI()
}
}
var session:TWTRSession!{
didSet{
stTwitter.getHomeTimelineSinceID(nil, count: 30, successBlock: { (tweets) in
self.userTweets = tweets // 2
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.userTweets = [] // 1
}
func updateUI(){
self.tableView.reloadData()
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
if let tweets = userTweets{
return tweets.count // 4
}
return 0
}
}
正如你所看到的,我初始化userTweets
在viewDidLoad中(1
)和替換它,當我真正得到推特(2
)。 然後在didSet
有一個更新UI(3
)調用啓動。但在numberOfRowsInSection
(4
)的計數結果爲零這是當userTweets在viewDidLoad中被初始化什麼(1
)
有人能解釋這是怎麼回事,如何userTweet應當被初始化,以及如何新的價值觀應該被添加到同一個變量。 注意會話在用戶從不同的屏幕/視圖登錄時被初始化。
'tweets'從2哪裏來?你有沒有在2處設置斷點?你有兩次收到推特計數記錄嗎? – Paulw11
你的代碼沒有意義。你寫'self.userTweets = tweets',但沒有這樣的'tweets',所以你的代碼不可能編譯。您已經省略了一些非常重要的內容 - 您沒有向我們展示您的真實代碼。那麼,誰能提供幫助? – matt
@matt更多代碼已添加。 – katch