2016-04-13 20 views
1

kullanarak çekirdek verilerden çift ve tek değerler nasıl getirilir? Temel veri varlığımdan bile tek ve tek değerler almak istiyorum, uygulamayı kilitlediğinden, lütfen aşağıdaki kod ve düzeltmeye bakın. sokak% 2 = 0 ayrıştıramadı söyleyerekPredicate

 NSPredicate *predicate; 
     if ([leadFilter.rank isEqualToString:@"Even"]) { 
      predicate = [NSPredicate predicateWithFormat:@"(street%2) = 0"]; 
     } 
     else 
      predicate = [NSPredicate predicateWithFormat:@"street%2 != 0)"]; 
     [predicateArray addObject:predicate]; 

Onun.

cevap

7

Bunu doğrudan Çekirdek Veri'de yapabilirsiniz, ancak sözdizimi biraz kıllı.

NSExpression *evenOddExpression = [NSExpression expressionWithFormat:@"modulus:by:(%K,2)", @"street"]; 

NSFetchRequest *evenOddFetch = [NSFetchRequest fetchRequestWithEntityName:@"ENTITY_NAME"]; 

NSExpression *zeroExpression = [NSExpression expressionForConstantValue:@0]; 
NSPredicate *evenOnly = [NSComparisonPredicate predicateWithLeftExpression:evenOddExpression rightExpression:zeroExpression modifier:NSDirectPredicateModifier type:NSEqualToPredicateOperatorType options:0]; 
evenOddFetch.predicate = evenOnly; 

sonuç nesne street eşit bir değere sahip yönetilen hangisi olacak: dahi olduğunu street sadece değerlerini getirme için, lütfen böyle getirme kurdu.

Güncelleştirme: Marcus, NSDictionaryResultType'un aslında gerekli olmadığına işaret ettikten sonra daha kolay hale getirildi.

+0

Evet Tom cevabınız da doğru bir şekilde değiştirdikten sonra sorunumu çözdü, Değerli zaman ve bilgi paylaşımınız için teşekkürler. –

+1

Neden bir "NSDictionaryResultType" gerekli? –

+1

... ve kıllı sözdizimini kısa devre yapabilir: 'NSPredicate * evenOnly = [NSPredicate predicateWithFormat: @" modül: by: (sokak, 2) == 0 "];' – pbasdf

3

Bir yüklemedeki bu tür bir matematik desteklenmez.

Çözüm:

NSManagedObject alt sınıf

- (BOOL)isEven 
{ 
    return self.street % 2 == 0 
} 

mülkiyet isEven bilgisayarlı bir boolean oluşturun ve yüklemi biçimini isEven == TRUE veya isEven == FALSE kullanın.

predicate = [NSPredicate predicateWithFormat:@"isEven == TRUE)"]; 
+0

Yardımlarınız için teşekkürler Vardian. –

+0

Doğru değil. Cevabımı gör. :) –

İlgili konular