Firebase 功能在 xcode7 中冻结应用程序,但在 xcode6.4 中有效

Posted

技术标签:

【中文标题】Firebase 功能在 xcode7 中冻结应用程序,但在 xcode6.4 中有效【英文标题】:Firebase function freezes app in xcode7, but works in xcode6.4 【发布时间】:2015-10-15 19:08:10 【问题描述】:

由于某种原因,这段代码在 xcode6.4 中运行良好,但在切换到 xcode7 时,它会冻结应用程序。

我想要做的是将帖子信息拉到用户的提要上并将其显示在表格视图上。我能够从 Firebase 中提取信息,但应用在显示在 tableview 上之前就冻结了。

编辑:当我没有任何约束或自动布局时,tableview 工作。当我尝试动态单元格高度时,它似乎不起作用。

func getRadarData() 
    let url = "https://(insert appname).firebaseio.com/users/" + currentUser + "/postsReceived/"
    let targetRef = Firebase(url: url)

    targetRef.observeEventType(.ChildAdded, withBlock: 
        snapshot in
        print("child")

        if let found = self.posts.map( $0.key ).indexOf(snapshot.key) 
            let obj = self.posts[found]
            print(obj)
            print(found)
            self.posts.removeAtIndex(found)
        

        let postsUrl = "https://(insert appname).firebaseio.com/posts/" + snapshot.key
        let postsRef = Firebase(url: postsUrl)
        var updatedAt = snapshot.value["updatedAt"] as? NSTimeInterval
        var endAt = snapshot.value["endAt"] as? NSTimeInterval

        if updatedAt == nil 
            updatedAt = 0
        

        if endAt == nil 
            endAt = 0
        

        postsRef.observeSingleEventOfType(.Value, withBlock:  snapshot in
            if let key = snapshot.key
            if let content = snapshot.value["content"] as? String 
                if let creator = snapshot.value["creator"] as? String 
                    if let createdAt = snapshot.value["createdAt"] as? NSTimeInterval 
                                let userurl = "https://(insert appname).firebaseio.com/users/" + (creator)
                                let userRef = Firebase(url: userurl)
                                userRef.observeSingleEventOfType(.Value, withBlock:  snapshot in
                                    if let username = snapshot.value["username"] as? String 
                                        let updatedDate = NSDate(timeIntervalSince1970: (updatedAt!/1000))
                                        let createdDate = NSDate(timeIntervalSince1970: (createdAt/1000))
                                        let endedDate = NSDate(timeIntervalSince1970: (endAt!))

                                        let post = Post(content: content, creator: creator, key: key, createdAt: updatedDate, name: username, joined: true, messageCount: 0, endAt: endedDate)

                                        self.posts.append(post)

                                        // Sort posts in descending order
                                        self.posts.sortInPlace( $0.createdAt.compare($1.createdAt) == .OrderedDescending )
                                        self.tableView.reloadData()

                                    
                                )

                    
                
                

            
        )
    )

这是我的 tableview 代码,我在 textView 和 nameLabel 上使用了自动布局

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    let cell: RadarTableViewCell = tableView.dequeueReusableCellWithIdentifier("radarCell", forIndexPath: indexPath) as! RadarTableViewCell

    let creator: (String) = posts[indexPath.row].creator
    let key = posts[indexPath.row].key

    let radarContent: (AnyObject) = posts[indexPath.row].content
    cell.textView.selectable = false
    cell.textView.text = radarContent as? String
    cell.textView.userInteractionEnabled = false

    cell.textView.selectable = true

    let radarCreator: (AnyObject) = posts[indexPath.row].name

    cell.nameLabel.text = radarCreator as? String

    return cell

【问题讨论】:

嗨,布赖恩,很抱歉听到这个消息。你介意清理一下这个例子吗(或者发布这个完整的独立代码),因为我很难让它“正常工作”开箱即用,我担心如果我开始翻录会改变行为的事情。另外,这是 XCode 7.1 beta 还是 7.0?您可以添加断点或查看它在哪里冻结(也许通过显示正在打印的内容来比较 XCode 6.4 和 XCode 7 中的预期行为)? 我为我的表格视图添加了代码。我也在使用 xcode 7.0。我能够从 firebase 获取信息,但应用程序在它显示在 tableView 上之前就冻结了 Firebase 也在我使用它的所有其他实例中工作。似乎只是这个特定功能和 tableView 的问题 【参考方案1】:

问题是我的 textView 中有初始文本。我在我的故事板上删除了它,我的应用程序现在可以工作了。

在这里找到解决方案:Why does a previously working Xcode project hang up in Xcode 7 when presenting a new UITableviewController Subclass?

【讨论】:

以上是关于Firebase 功能在 xcode7 中冻结应用程序,但在 xcode6.4 中有效的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 7.1 模拟器在我使用时不断冻结

Firebase Firestore get() 快照在第二次查询时冻结

使用 Firebase 数据 Swift、Xcode 7 填充 UITableViewController

React-Native Firebase Phone Auth 冻结 iPhone

从firebase数据库中获取添加的孩子,它冻结了用户界面

Firebase 使任务仅在主线程上执行,导致 Unity 冻结