如何根据当前用户 ID 查询 Realm 数据库?
How do I query Realm database based on current user ID?
我有一个 Realm 数据库,它保存具有不同用户 ID 的不同用户的记录。
我还有一个显示 Realm 查询结果的 UITableViewController。我想查询 return 只有当前用户的段落。
class PassageListController: UITableViewController {
var currentUserID: Int = NSUserDefaults.standardUserDefaults().objectForKey("currentUserID") as! Int
lazy var dataArray: Results<Passage> = { return try! Realm().objects(Passage).filter("userID == \(currentUserID)")}
问题是我收到以下错误消息:
Instance member 'currentUserID' cannot be used on type 'PassageListController'
这是尽管尝试延迟加载 Realm 查询。解决这个问题的最佳实践方法是什么?
期待一些解决方案:
- 我无法在 viewDidAppear() 中加载查询,因为无法定义一个空的领域结果,并且它需要在整个控制器中都可以访问。
- 我可以将 currentUserID 设置为全局变量,但这违反了我的原则。
在进行 Realm 查询之前,似乎在计算 currentUserID
的计算值时遇到了一些问题。
,看起来这种问题可以通过将 currentUserID
的定义更改为只读访问器来解决:
var currentUserId: Int {
get {
return NSUserDefaults.standardUserDefaults().objectForKey("currentUserID") as! Int
}
}
希望对您有所帮助!
TiM 的回答让我找到了正确的方法:
class PassageListController: UITableViewController {
var currentUserID: Int = NSUserDefaults.standardUserDefaults().objectForKey("currentUserID") as! Int
var dataArray: Results<Passage> {
get {
return try! Realm().objects(Passage).filter("userID == \(currentUserID)")
}
}
项目现在构建,但我不确定这是否是 Realm 的最佳方法,因为
- 现在,每次访问 dataArray 时,查询都可能是 运行,并且
- 我不确定 Realm 的通知是否有效。
我有一个 Realm 数据库,它保存具有不同用户 ID 的不同用户的记录。
我还有一个显示 Realm 查询结果的 UITableViewController。我想查询 return 只有当前用户的段落。
class PassageListController: UITableViewController {
var currentUserID: Int = NSUserDefaults.standardUserDefaults().objectForKey("currentUserID") as! Int
lazy var dataArray: Results<Passage> = { return try! Realm().objects(Passage).filter("userID == \(currentUserID)")}
问题是我收到以下错误消息:
Instance member 'currentUserID' cannot be used on type 'PassageListController'
这是尽管尝试延迟加载 Realm 查询。解决这个问题的最佳实践方法是什么?
期待一些解决方案:
- 我无法在 viewDidAppear() 中加载查询,因为无法定义一个空的领域结果,并且它需要在整个控制器中都可以访问。
- 我可以将 currentUserID 设置为全局变量,但这违反了我的原则。
在进行 Realm 查询之前,似乎在计算 currentUserID
的计算值时遇到了一些问题。
currentUserID
的定义更改为只读访问器来解决:
var currentUserId: Int {
get {
return NSUserDefaults.standardUserDefaults().objectForKey("currentUserID") as! Int
}
}
希望对您有所帮助!
TiM 的回答让我找到了正确的方法:
class PassageListController: UITableViewController {
var currentUserID: Int = NSUserDefaults.standardUserDefaults().objectForKey("currentUserID") as! Int
var dataArray: Results<Passage> {
get {
return try! Realm().objects(Passage).filter("userID == \(currentUserID)")
}
}
项目现在构建,但我不确定这是否是 Realm 的最佳方法,因为
- 现在,每次访问 dataArray 时,查询都可能是 运行,并且
- 我不确定 Realm 的通知是否有效。