2012-07-13 62 views
0

我想通過稱爲「名稱」的屬性的第一個字母來過濾海關對象的數組。要做到這一點我做的第一個字母陣列:過濾陣列問題

_lettersArray = [NSArray arrayWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", nil]; 

我想保存在NSDictionary中的結果,其中的關鍵是第一個字母和目標對象與屬性名的第一個字母數組鍵:

for (NSString* letter in _lettersArray) { 
    NSPredicate* letterPredicate = [NSPredicate predicateWithFormat:@"name beginswith[c] '%@'", letter]; 
    NSArray* itemsLetter = [_items filteredArrayUsingPredicate:letterPredicate]; 

    [_letters setObject:itemsLetter forKey:letter]; 
} 

但是,當這個算法結束_letters字典有所有的鍵,但對象是空的數組。我曾試圖改變

NSPredicate* letterPredicate = [NSPredicate predicateWithFormat:@"name beginswith[c] '%@'", letter]; 

NSPredicate* letterPredicate = [NSPredicate predicateWithFormat:@"name beginswith[c] 'B'"]; 

而且一切工作正常(當然它給我只能與B開始的對象)。我做錯了什麼?對我來說,顯然問題出在謂詞指令中。我已經看到_lettersArray是好的,它是和我試圖使用[letter characterAtIndex:0]而不是字母,但給了我相同的結果...

謂語句的NSLog給我準確的句子形成,我手動和工作!

回答

2

Predicate Programming Guide

單或雙引號變量(或替代變量字符串) 原因%@,%K,或$變量在 格式字符串被解釋爲一個文字,從而防止任何替代。

所以儘量採取引號關 '%@' 的:

NSPredicate* letterPredicate = [NSPredicate predicateWithFormat:@"name beginswith[c] %@", letter]; 
+0

完美!我已經嘗試過,工作正常,感謝您的幫助! – Jpellat 2012-07-13 14:10:32