2010-10-15 30 views
9

NSPredicate kullanarak bir tabloyu sorgulamaya çalışıyorum. ("Something_id == 2")NSPredicate name ile sorun bildirme

NSNumber *value = [NSNumber numberWithInteger: 2]; 
NSString *columnName = @"something_id"; 

NSLog(@"%@ == %@", columnName, value); 
NSPredicate *refQuery = [NSPredicate predicateWithFormat: @"%@ == %@", columnName, value]; 

NSLog beklediğim ne basar, ama yüklem çalışmaz: Burada ne yapıyorum aslında.

NSPredicate *refQuery = [NSPredicate predicateWithFormat: @"something_id == %@", value]; 

Yani bu işi ve nasıl neden düzeltebilirim olmaz

: Ben geçtiğinizdeyse Ancak, yüklem işe EDER?

+0

Bu çok garip ... benim için de olur .. –

cevap

30

The Predicate Programming Guide from Apple diyor ki:

% @ bir nesne için var arg ikame değerinden-genellikle olduğu dize, sayı, veya tarih.

% K anahtar yolu için var arg değişkenli şeklindedir.

% @ kullanarak bir biçim dizesi yerine konur dize değişkenleri, onlar tırnak işaretleri ile çevrilidir

. için bir dinamik özellik adı belirtmek isterseniz, biçim dizgisinde % K'yi kullanın.

Yani, durumda, SütunAdı bir ana yol olarak% K koymak gerekir, tırnak işaretleri eklenecektir değil% @:

NSPredicate *refQuery = [NSPredicate predicateWithFormat: @"%K == %@", columnName, value]; 

Umut bu şüpheleri temizlemek.

+0

FWIW muhtemelen olacak Tamsayı ikameleri hatalı olarak çift tırnak içine alındığından, yüklemin her iki tarafında% K kullanmak isteyin. – ImHuntingWabbits

+0

Hayır, değer bir tam sayı değil, ancak belgelerinizde görebileceğiniz gibi bir NSNumber, doğru biçim. –

+0

Teşekkürler, ağrılı bir baş ağrısından kurtardım. :) –

1

Çok garip, ama ben aşağıdakileri yaparak çözdük düşünüyorum:

NSNumber *value = [NSNumber numberWithInteger: 2]; 
NSString *columnName = @"something_id"; 

NSString *predicate = [NSString stringWithFormat: @"%@ == %@", columnName, value]; 
NSPredicate *refQuery = [NSPredicate predicateWithFormat: predicate]; 
+0

Eğer kimse bunun neden olduğuna biraz ışık tutabilirse çok minnettar olurum. Eğer izin verirsen – henryeverett

+0

burada Çünkü yüklem formatını, "something_id == 2", bu çıkışı bu olacak dize vermek: "something_id" == 2, bu nedenle saha tırnaklar olmadan bir dize değil, bir alan haline gelecektir – Climbatize