gpt4 book ai didi

c# - SQLite 限制和排序到 iPhone 上的页面

转载 作者:行者123 更新时间:2023-11-29 13:00:22 24 4
gpt4 key购买 nike

我有一个用 Xamarin 构建的 iPhone 应用程序,它将对象存储到本地 SQLite 数据库。由于加载所有数据需要很长时间,我一次加载 20 条记录,并在用户滚动时加载更多。

我按 CreatedDate 进行分页,它由其 DateTime.Ticks 属性(自 DateTime.MinValue 以来的 100 纳秒数)存储为一个整数字段。我总是将最早加载的 CreatedDate 传递给读取函数。

  • 整数列:8 字节有符号
  • DateTime.Ticks:8 字节有符号

写CreatedDate的代码如下:

var param = cmd.CreateParameter();
param.ParameterName = "@date";
param.Value = myObject.DateCreated.Value.Ticks;
cmd.Parameters.Add(param);

而读取下一页的代码如下:

cmd.CommandText = "SELECT * FROM MyTable WHERE CreatedDate < " +
(offset.HasValue ? offset.Value.Ticks : DateTime.MaxValue.Ticks) +
" ORDER BY CreatedDate DESC LIMIT " + pageSize;

我可以看出日期是正确的,因为我的 UITableView 中的部分基于它们的 CreatedDates。

所以这是所有奇怪的行为(即我的问题)。

我从模拟器开始。起初,我使用的是 DESC,它返回最旧的对象。然后我将它切换到 ASC,它返回了最新的对象。这似乎倒退了。然后,它神奇地开始与 DESC 一起正常工作。 Paging 开始在模拟器中工作,并且仍然有效。

然后我切换到真正的 iPhone。DESC 和 ASC 问题再次出现,但这次并没有自行修复(ASC 返回最近的对象)。无论哪种方式,当我滚动到 UITableView 的底部时,加载将以正确的偏移量再次调用,但它没有返回任何数据(因此所有分页停止)。

我知道的事情。

  • 所有数据都在表中,因为如果我 SELECT * 我会得到正确日期的所有数据。为了确定,我还将所有日期都写入了控制台。
  • 我的最新日期是 635194634041230000
  • 我最早的约会对象是 635166796800000000
  • 不返回任何行的偏移日期为 635193909600000000

注意。我可以接受对我如何做的建设性批评。如果我足够喜欢它,我会投票。但是,如果您发布包含该信息的答案,也请尝试解决我当前遇到的问题。

最佳答案

我不在电脑前,所以我无法真正调试您的代码 atm,但是,我想我应该链接到我为 MonoTouch 编写的一些通用代码以从 SQLite 动态分页数据:

https://github.com/jstedfast/MonoTouch.SQLite/blob/master/MonoTouch.SQLite/SQLiteTableModel.cs

此代码使用 SQLite-net 而不是 System.Data,但它可能仍然有用。

分页进出的核心逻辑在GetItem()中。

关于c# - SQLite 限制和排序到 iPhone 上的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19920006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com