我遇到这个问题已经很长时间了。我正在尝试用UITableView填充NSMutableArray。但是我没有将所有对象都排除在循环之外。对象的总数为167。但是,它返回的是同一对象的167。


  我像这样在循环外声明了数组:


class TableViewController: UITableViewController {

var sermon = SermonLink()
var sermons: NSMutableArray = []

override func viewDidLoad() {
    super.viewDidLoad()

    loadContent()
   }



  整个过程通过一种方法发生:


func loadContent() {

var elements: NSArray = []


    let urlForHTML = NSURL(string:"http://ontherock.dk/?page_id=1141")
    var dataForHTML: NSData = NSData(contentsOfURL: urlForHTML!)!
    var htmlParser = TFHpple(HTMLData: dataForHTML)
    var htmlXPathString = "//td[@class='lyf_td_filename']/a"
    elements = htmlParser.searchWithXPathQuery(htmlXPathString) as NSArray

        var sermonArr:NSMutableArray = []
        for item in elements {
            var element: TFHppleElement = item as! TFHppleElement

            var firstChildItem: NSString = element.firstChild.content
            var dashSeperatedSermonArray = firstChildItem.componentsSeparatedByString("-") as! [String]


            sermon.subject = dashSeperatedSermonArray[4].stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
            sermon.speaker = dashSeperatedSermonArray[3].stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
            sermon.urlForAudioSermon = element.attributes["href"] as! String



            sermonArr.addObject(sermon)//Here inside the loop I get the expected data
        }
        sermons = sermonArr //sermons contains only the object at the last index, 167 times
        self.tableView.reloadData()
 }

最佳答案

以下可能是问题所在。

由于您将var sermon = SermonLink()初始化为类的属性,并且正在更新for循环内的相同对象。尝试在每次迭代的for循环内创建此代码。

关于ios - 使用Swift使用数组的问题:For循环后无法访问数组的所有对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30107959/

10-12 00:27
查看更多