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 中有效的主要内容,如果未能解决你的问题,请参考以下文章
Firebase Firestore get() 快照在第二次查询时冻结
使用 Firebase 数据 Swift、Xcode 7 填充 UITableViewController