2013-01-17 8 views
5

Proste pytanie dotyczące NSPredicate. Staram się budować moje orzeczenie z „przeszedł w” wartościach tak:NSPredicate predicateWithFormat przekazuje w nazwie atrybutu

NSPredicate* currentPredicate = [NSPredicate predicateWithFormat:@"%@ == %@",key,[changesDict valueForKey:@"Id"] ]; 

Jednak nie udało się uzyskać to, aby działać poprawnie. Jeśli wstawię wartość rzeczywistą, przez którą przechodzę, to działa. Tak to działa:

NSPredicate* currentPredicate = [NSPredicate predicateWithFormat:@"contactId == %@",[changesDict valueForKey:@"Id"] ]; 

(Zauważ, że włożona ContactID w przeciwieństwie do poprzedniego przykładu, gdzie przechodzą ciąg o tej samej nazwie)

Aby rozwiązać ja NSLogged dwa predykaty patrząc na ich opisów i byli różne. Pokażę im poniżej.

To jest praca jednego

2013-01-17 10:29:25.513 TestingCoreData[1776:3b03] contactId == "5878" 

To nie działa jeden

2013-01-17 10:29:25.513 TestingCoreData[1776:3b03] "contactId" == "5878" 

Więc mogę rodzaju zobaczyć, że to wstawiając ciąg gdzie tak naprawdę ma się nazwa atrybutu, który będę później wykorzystywać w żądaniu pobierania. Ale czy jest jakiś sposób, aby to osiągnąć, przekazując wartości?

Odpowiedz

14

Dla kluczy lub kluczowych ścieżek, trzeba użyć formatu na %K:

[NSPredicate predicateWithFormat:@"%K == %@", key, [changesDict valueForKey:@"Id"]]; 

(. Zobacz Parser Basics w "Programowanie predykatów Guide")

+0

Perfect! Link również użyteczny. Dzięki! – hatunike

+0

@hatunike: Nie ma za co! –

Powiązane problemy