2014-01-10 74 views
0

我正在學習NSPredicate,我有一個問題的例子。NSPredicate格式字符串意想不到的結果

NSArray * array = @[@{@"name":@"KudoCC"}, @{@"name":@"123"}] ; 
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"name == '%@'", @123] ; 
NSArray * result = [array filteredArrayUsingPredicate:predicate] ; 

這裏的參數是@ 123,它是NSNumber類型。我認爲它的工作原理與@"name == '123'"相同,但結果爲零,我預計爲@{@"name":@"123"}

有人可以告訴我爲什麼嗎?先謝謝你。

回答

2

文檔here說,

如果使用變量替代使用%@(如像的firstName%@),在引號爲您自動添加。

在一般情況下應避免使用引號。如果您使用類似@"%K == '%@'"的東西,則實際上將該密鑰與@"%@"進行比較。只有當你有一個像@[@{@"%@": @"KudoCC"}]這樣的數組時,你需要這種方式。

+0

不,它是不同的。 「@」%K =='%@'「 該謂詞檢查鍵%K的值是否等於字符串字面值」%@「(注意%@周圍的單引號)。在運行時作爲參數提供給predicateWithFormat :.「 – KudoCC

+0

是的,我知道,我想你不想這樣做。 –

+0

抱歉誤會了你,我編輯了我的問題,請幫忙。 – KudoCC

相關問題