我写了一个触发的查询viewWillAppear.通过快速导航回到该屏幕导致崩溃sqlite3_prepare_v2.
我假设的是崩溃是由于之前的查询没有最终确定.
我正在调用数据库操作,dispatch_async因为我首先更新远程数据,然后将其保存在数据库中.
代码如下所示:
dispatch_queue_t myQueue = dispatch_queue_create("My Queue",NULL);
dispatch_async(myQueue, ^{
[self parseActivityResponse:data]; // Sqlite operation here
dispatch_async(dispatch_get_main_queue(), ^{
// Update the UI
if(loaderImageview)
[loaderImageview removeFromSuperview];
[tableActivities reloadData];
});
});
Run Code Online (Sandbox Code Playgroud)
查询如下:
- (NSMutableArray*)GetAllInvitations:(NSString*)ActivityId
{
NSMutableArray *arrInvitations = [[NSMutableArray alloc]init];
sqlite3_stmt *statement = nil;
@try {
const char *sql = "SELECT * FROM Invitation where ActivityId = ?";
if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) {
sqlite3_bind_text(statement, 1, [ActivityId UTF8String], -1, SQLITE_TRANSIENT);
while (sqlite3_step(statement) …Run Code Online (Sandbox Code Playgroud) 我想滚动到给定的索引(self.boldRowPath),但是当我scrollToRow之前执行调试时reloadData().
怎么知道reloadData已经完成了?
func getAllTimeEvent() {
self.arrAllTimeEvent = ModelManager.getInstance().getAllTimeEvent(from: self.apportmentDateFrom, to: self.apportmentDateTo)
self.tblTimeEvent.reloadData()
self.tblTimeEvent.scrollToRow(at: self.boldRowPath ?? [0,0], at: .top, animated: true)
}
Run Code Online (Sandbox Code Playgroud)
任何帮助都感激不尽.
我正在我的表视图中重新加载一些单元格.重新加载完成后,我想滚动以便它们可见.我知道scrollToRowAtIndexPath:atScrollPosition:方法.但是我需要在重新加载完成后调用它,因为重载将改变行高.
以下是一些相关问题,但它们并没有完全回答我的问题.
UITableView,重新加载时滚动到底部?
如何在最后一个单元格上启动UITableView
编辑 - 我的重新加载不插入或删除任何行.相反,我正在重新加载一个或多个单元格以反映更新的信息.
如何开始UITableView滚动到最后一个单元格?
只是有一个平原UITableView(frame: CGRectZero, style: UITableViewStyle.Plain),当出现在屏幕上时,将开始一直滚动到底部。
我试过了:
// 1
reloadData()
scrollToRowAtIndexPath(
NSIndexPath(forItem: dataArray.count-1, inSection: 0),
atScrollPosition: .Top, animated: false
)
// 2
reloadData()
var contentOffset = self.contentOffset
contentOffset.y = CGFloat.max
setContentOffset(contentOffset, animated: false)
Run Code Online (Sandbox Code Playgroud)
在 tableView 的init方法上(在我的子类中)
我也尝试过经典的CGAffineTransformMakeScale(1,-1)hack,但这会使我的单元格粘在底部,我希望它们卡在顶部(但滚动到底部)。(只有当我有几个单元格时才相关,当它们没有填满整个UITableView空间时)
编辑:另一个细节,我正在使用动态单元格UITableViewAutomaticDimension。
我有一个可扩展的UITableView。当用户点击标题时,相关的单元格将显示一个动画(RowAnimation.Fade),然后UITableView滚动到该标题(展开的标题)。当用户再次点击该标题时,它将折叠。
我要实现的目标:我需要具有标题和单元格的可扩展UITableView。用户点击标题时,需要使用来打开单元格RowAnimation.Fade,然后滚动到该标题。
奖励:如果在用户点击标题时可以使箭头动画化,那还是很棒的,但是我认为这会引起另一个错误,因为我们在同一线程(主线程)上运行了很多动画
我的问题是,当用户点击标题时,tableView内容插入项将发生更改,整个标题将变为负Y位置。因此发生了奇怪的动画。(例如,标题看起来在单元格的中心)但是,动画结束后,一切看起来都正确。
func toggleSection(header: DistrictTableViewHeader, section: Int) {
self.selectedHeaderIndex = section
self.cities[section].isCollapsed = !self.cities[section].isCollapsed
let contentOffset = self.tableView.contentOffset
self.tableView.reloadSections(IndexSet(integer: section), with: UITableView.RowAnimation.fade)
self.tableView.scrollToRow(at: IndexPath(row: NSNotFound, section: section) /* you can pass NSNotFound to scroll to the top of the section even if that section has 0 rows */, at: UITableView.ScrollPosition.top, animated: true)
}
Run Code Online (Sandbox Code Playgroud)
另外:我如下设置标题和单元格的高度。
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 1
}
func tableView(_ …Run Code Online (Sandbox Code Playgroud) 在我的UITableView使用方法滚动到最后一个单元格:
WLNetworkClient.sharedClient().createCommentWIthText(commentTextView.text, forItem: item) { error in
defer {
UIAlertController.showAlertFromError(error)
}
if error == nil {
self.fetchedResultsController.fetchRequest.fetchLimit += 1
try! self.fetchedResultsController.performFetch()
self.tableView.reloadData()
self.scrollTableViewToBottom()
}
}
private func scrollTableViewToBottom() {
tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: fetchedResultsController.fetchedObjects!.count - 1, inSection: 0), atScrollPosition: UITableViewScrollPosition.Bottom, animated: true)
}
Run Code Online (Sandbox Code Playgroud)
但是这没有按预期工作,因为ALWAYS表从顶部滚动,即使我在第二个单元格上也是如此.如何解决这个问题?