2014-07-20 14 views
17

i Çekirdek veri nesnesi var veNSPredicate Swift ve Core Veri

Yani SQL olurdu (i Filtre olarak kullanmak istediğiniz bir dize (GUID) ve bir Int) 2 Fieds var "SEÇ ile * qIndex = 1 VE GUID = '88bfd206-82fb-4dd0-b65d-096f8902855c'

Ive Çekirdek Verilerle denedim ama dize değeri ile Filtre mümkün değilim Yanıtlar DAN. Burada

benim Kod olduğu

var request = NSFetchRequest(entityName: "Answers") 
    request.returnsObjectsAsFaults = false; 

    let resultPredicate1 = NSPredicate(format: "qIndex = %i", qIndex) 
    let resultPredicate2 = NSPredicate(format: "formUUID = %s", formUUID) 

    var compound = NSCompoundPredicate.andPredicateWithSubpredicates([resultPredicate1, resultPredicate2]) 
    request.predicate = compound 


    var results:NSArray = context.executeFetchRequest(request, error: nil) 

Herhangi bir fikrim Yanlış ne yapıyorum? Aynı Kod ve 2 Tamsayı Değerleri için Filtre ile iyi çalışıyor. formUUID bir NSString veya Swift String olduğunu

+1

Dize Biçimi Belirticisini% i kullandınız. Bir ondalık için% d, bir NSNumber için% @ olması gerektiğini düşünüyorum. Int için değil, int% – Obenland

+1

@Xean: Hem "% d" hem de "% i" bir int biçimlendirmek için kullanılabilir, aynıdır. –

+0

Eşleşen bir şey olmadığında sonuçlar neden boş değil? [ (varlık: Grafikler; kimlik: 0xd0000000000000000 ; veri: )] –

cevap

40

Eğer Peşin

Teşekkür sonra %@ yer tutucu kullanmak zorunda:

let resultPredicate2 = NSPredicate(format: "formUUID = %@", formUUID) 
+1

Öneri önerisine dikkat edin: Her ikisi de = = ve '==' bir dizgede kullanılabilir. –

8

Bu sorunuzun tam cevabı değil, ancak bir sorun insanlar artık şimdi koduyla encouter olabilir: XCode son sürümünde

, artık bu gibi yüklemi ambalajından gerekir:

var compound = NSCompoundPredicate.andPredicateWithSubpredicates([predicate1!, predicate2!]) 

NSPredicate başlatıcısı artık NSPredicate dönüyor mu? yazın.

+1

Kendin dediğin gibi, bu gerçekten bir cevap değil, bir not. Bu nedenle bunu bir yorum olarak eklemelisiniz, cevap olarak değil. – JohannesB

+6

Evet, doğru. Ama ben sadece birkaç hafta boyunca stackOverflow'a kayıt oldum ve saygınlığım (1) başkalarının sorularına/cevaplarına yorum yapmama izin vermiyor;) – DarksteelPenguin

1

yerine yaklaşık %@ dönüşüm endişesi ve daha sonra AND yüklemleri oluştururken, sen PredicatePal çerçeve kullanabilirsiniz:

let compound = *(Key("qIndex") == qIndex && Key("formUUID") == formUUID) 

qIndex ve formUUID doğru türde olduğunu varsayarsak, Swift otomatik Key için doğru tipini anlar olacak nesneler.