我有一个语言实体,用于存储文本及其附带的语言代码。我需要获取用户所选语言的所有文本列表,除非该语言中没有特定的文本行,在这种情况下我需要获得英文版本。
我的表基本上是这样的,用SQL术语:
DECLARE TABLE Languages
(
textId int,
languageCode char(2),
text varchar(2000)
)
将textId和languageCode作为我的主键。
在SQL中,我基本上会这样做:
SELECT ISNULL(l.text, e.text)
FROM
(SELECT * FROM Languages WHERE languageCode = 'en') t
LEFT JOIN
(SELECT * FROM Languages WHERE languageCode = @selectedLanguage) l
ON l.textId = t.textId
这应该为每个textId准确地给我一段文字;如果找不到selectedLanguage,请使用英语。
是否可以使用NSPredicate和FetchedResultsController执行此类操作?我在SUBQUERY关键字上找到了一些信息,但没有真正解释如何将它与NSPredicate一起使用。
答案 0 :(得分:0)
好的,所以我能够以一种不同的,更简单的方式做到这一点......
[NSPredicate predicateWithFormat:
@"language.languageCode == %@ OR
(language.languageCode = 'en' AND NOT (question IN %@))", languageCode, foundLanguages]
其中foundLanguages是我所选语言中所有文本的数组。它确实需要一个额外的获取请求来获取所选语言的所有文本列表,但它会准确返回所需的内容。比我在SQL中思考的左连接和子查询更简单。可能效率低下。