2015-05-29 31 views
3

我在從服務器收集數據3天后發生iOS應用程序發生問題。我試圖找出問題並不知道它是否存在數據損壞問題或代碼中的問題。如何將謂詞轉換爲SQL語句?

我已經將iOS數據庫下載到我的Mac上,並且可以針對它運行sql語句。

有沒有辦法將以下謂詞「轉換」爲SQL語句,以便我可以驗證數據?

NSMutableArray *predicates = [[NSMutableArray alloc] init]; 
    NSDate *twoWeeksago = [[NSCalendar autoupdatingCurrentCalendar] dateByAddingUnit:NSCalendarUnitDay 
                      value:-14 
                      toDate:[NSDate date] 
                     options:0]; 
    [predicates addObject:[NSPredicate predicateWithFormat:@"isRemoved == 0"]]; 
    [predicates addObject:[NSPredicate predicateWithFormat:@"(publicationDatetime >= %@) AND (publicationDatetime <= %@)", twoWeeksago, [NSDate date]]]; 
    [predicates addObject:[NSPredicate predicateWithFormat:@"(source == %@) OR (source == %@)", @"BBC", @"Guardian"]]; 
    NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:predicates]; 
+0

你還需要幫助嗎? – MarioAna

+0

當然,這將是很好的知道未來:) – Houman

+0

請參閱下面的答案。我真的希望它可以幫助你。 – MarioAna

回答

0

好了,所以有些在這裏瞎猜的,因爲我不知道它在做什麼錯了你和我的目標C和謂語的知識是有限的,但我認爲你是結束得到的是這個:

where removed = 0 
    and (publicationDatetime >= 2weeksAgo) AND (publicationDatetime <= today) 
    and (source = 'BBC') OR (source = 'Guardian') 

現在,我認爲它可能會給你意想不到的結果是在OR部分。什麼它基本上說的是,它會帶回滿足記錄:

removed = 0 
(publicationDatetime >= 2weeksAgo) 
(publicationDatetime <= today) 
(source = 'BBC') 

OR 

(source = 'Guardian') 

什麼,我認爲你需要改變的是:

(source = 'BBC') OR (source = 'Guardian') 

這樣:

((source = 'BBC') OR (source = 'Guardian')) 

把那些進入另一組括號意味着必須滿足所有其他條件,並且必須符合'BBC'或'Guardian'中的任一個。

+0

謝謝,我暫時接受,直到我可以完全測試它。 – Houman