【发布时间】:2015-11-05 10:04:45
【问题描述】:
我希望你能帮助我。我正在使用 Realm 作为底层数据库系统构建一个 Mac OS X 应用程序。
我的模型如下所示:
-Brick:由属性title和text组成的文本块
-GeneratorBrick:一个多对多关系对象,用于对Generator、Brick和其他一些与问题无关的数据之间的关系进行建模。此对象的属性称为“砖”
-Generator:由一些文本以及属性名称为“generatorBricks”的GeneratorBricks列表组成的配置
在我的应用程序中,我现在有一个 Generator 对象。这个包含一堆 GeneratorBrick 对象的列表,这些对象本身都有一个 Brick 和一些其他数据。我将它们显示在 TableView 中。我现在想显示另一个 TableView,其中我只显示那些不在当前生成器的 TableView 中的 Brick 对象。我访问的发电机中的砖块
generator.generatorBricks[index].brick
在我的应用程序的早期版本中,我通过var bricks: Results<Brick> = try! Realm().objects(Brick).sorted("title").filter("inGenerator = false") 加载了我需要的所有 Brick 对象,但由于我的模型从使用属性“inGenerator”更改为使用另一个模型类“GeneratorBrick”,我需要另一种过滤方式。不幸的是,我不知道如何完成这项任务。我尝试了不同的谓词,例如generatorBricks IN %@", generator.generatorBricks,其中属性“generatorBricks”是 Brick 类中的反向链接属性。
也许我正在尝试使用谓词无法完成的事情,或者我只是没有足够的谓词经验。也许我是盲人,因为我更习惯于纯 SQL,我会使用类似以下内容:
create table brick (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title varchar(255)
);
create table generator (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title varchar(255)
);
create table generatorbrick (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
brickId INT(6),
generatorId INT(6)
)
select * from brick b join generatorbrick gb on b.id = gb.brickid where gb.generatorid is not 123
你明白我的问题吗?您需要更多信息吗?如果你能给我一个正确方向的提示,我很高兴提供。提前谢谢你。
【问题讨论】:
标签: swift macos nspredicate realm