2011-09-24 21 views
32

Bir NSPredicate öğesinde iki NSNumbers veya bir NSNumber ile bir Tamsayıyı nasıl karşılaştırabilirim?NSPredicate ile karşılaştırmak Integer

Denedim:

NSNumber *stdUserNumber = [NSNumber numberWithInteger:[[NSUserDefaults standardUserDefaults] integerForKey:@"standardUser"]]; 
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"userID == %@", stdUserNumber]; 

Eh, bu işe yaramazsa ... Herkes nasıl yapılacağını bir fikri vardır? Eminim bu oldukça kolay ama hiçbir şey bulamadık ...

cevap

82

NSNumber bir nesne türüdür. NSString'dan farklı olarak, NSNumber'un gerçek değeri %@ biçimiyle kullanıldığında değiştirilmez. Gerçek değeri, tamsayı değerini döndüren intValue gibi önceden tanımlanmış yöntemleri kullanarak almanız gerekir. Ve bir tamsayı değeri yerine geçecek şekilde format değiştiriciyi %d olarak kullanın.

yüklem olmalıdır

predicateWithFormat:@"userID == %d", [stdUserNumber intValue]]; 
+0

Büyük teşekkür ederim çok! Tüm bu% d% i% @% ... "kısayolların" listesi var mı? – wolfrevo

+1

... bu bir fark yaratmamalı. Ayrım biçimi ayrıştırıcısı, biçim dizesinde '% d 'öğesini görecek,' va 'listesinden bir' int 'yazacak ve ardından bir' NSNumber 'içine yerleştirecektir. –

+0

Bu garip çünkü ben de denedim: fetchRequest.predicate = [NSPredicate predicateWithFormat: @ "userID ==% i", [[NSUserDefaults standardUserDefaults] integerForKey: @ "standardUser"]]]; Ve bu işe yaramadı ... bu yüzden% d olmalı? ... Her neyse, şimdi çalışıyor :) – wolfrevo

2

Eğer predicateWithSubstitutionVariables kullanıyorsanız: ve yüklem istediğiniz değeri tamsayı değeri ile NSNumber olduğunu o zaman ikame değeri olarak NSString yerine yüklemi NSNumber kullanmak gerekir. Örnek bir bakın:

NSPredicate *genrePredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"genreID == $GENRE_ID"]]; //if we make only one NSPredicate if would look something like this: [NSPredicate predicateWithFormat:@"genreID == %d", [someString integerValue]]; 

NSPredicate *localPredicate = nil; 
for(NSDictionary *genre in genresArray){ 
    localPredicate = [genrePredicate predicateWithSubstitutionVariables:@{@"GENRE_ID" : [NSNumber numberWithInteger:[genre[@"genre_id"] integerValue]]}]; 
}