2009-10-27 15 views
5

dikkate almayan:NSDictionaryResultType ifadesi aşağıdaki isteği kurdunuz yüzden çekirdek verilerinde bir alanın maksimum değerini istemek, yeni eklenen nesneler

// Create fetch 
NSFetchRequest *fetch = [[NSFetchRequest alloc] init]; 
[fetch setEntity:[NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:context]]; 
[fetch setResultType:NSDictionaryResultType]; 

// Expression for Max ID 
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"myNumbericID"]; 
NSExpression *minExpression = [NSExpression expressionForFunction:@"max:" arguments:[NSArray arrayWithObject:keyPathExpression]]; 
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init]; 
[expressionDescription setName:@"maxID"]; 
[expressionDescription setExpression:minExpression]; 
[expressionDescription setExpressionResultType:NSDoubleAttributeType]; 
[fetch setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]]; 

// Execute the fetch. 
double theID = 0; 
NSError *error; 
NSArray *objects = [context executeFetchRequest:fetch error:&error]; 
if (objects && [objects count] > 0) { 
    theID = [((NSNumber *)[[objects objectAtIndex:0] valueForKey:@"maxID"]) doubleValue]; 
} 

o hesaba herhangi bir yeni içine almıyor görünür Ancak önce içeriğe yerleştirilmiş nesneler. Bu şekilde çalışması gerekiyor mu? Sadece mağazadaki nesneler üzerinde çalışıyor mu?

Dokümanlardaki herhangi bir başvuru bulamıyorum.

sayesinde

Mike

cevap

7

Apple Geliştirici Forumlar bir yanıt aldık ve o hesap kaydedilmemiş değişiklikleri dikkate almaz doğrulandı.

0

FYI, tüm NSExpression bölümünü atlayabilir ve yalnızca getirme ile devam edebilir, ardından maksimum değer için toplama operatörlerini kullanabilirsiniz.

theID = [objects valueForKeyPath:"@max.myNumbericID"]; 
+2

Bu işe yarayacak olsa da, önce ölçütlere uyan her nesneyi önce belleğe getirmeye güveniyordu. Benim durumumda bu çok fazla nesne olurdu. Bunu, veri deposuna karşı toplu SQL deyimi aracılığıyla hesaplamak için Çekirdek Verilere ihtiyacım vardı. –

+0

Bu durumda, yalnızca bir NSSortDescriptor ve fetchLimit 1 kullanabilirsiniz, daha sonra yalnızca tek bir nesneye yüklersiniz. – malhal

1

Bu davranış (kötü) belgelenmiştir [NSFetchRequest setIncludePendingChanges:]. NSDictionaryResultType ile YES değeri desteklenmez. Bu, kaydedilmemiş değişikliklerde NSExpressionDescription kullanamayacağınız anlamına gelir.

İlgili konular