2010-05-07 15 views
14

Yani Core Data Snippets bakarak içinde, ben aşağıdaki kodu bulundu:Çekirdek Veriler'de farklı değerler nasıl alınır?

... 
[request setEntity:entity]; 
[request setResultType:NSDictionaryResultType]; 
[request setReturnsDistinctValues:YES]; 
[request setPropertiesToFetch:[NSArray arrayWithObject:@"<#Attribute name#>"]]; 

// Execute the fetch 
NSError *error; 
id requestedValue = nil; // WTF? This isn't defined or used anywhere 
NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error]; 
if (objects == nil) { 
    // handle the error 
} 

Bu harika ve neye ihtiyacım için mükemmel görünüyor ... ama nasıl biri aslında kullanır? Sözlükleri döndürdüğünden beri, değerlere ulaşmak için bir anahtara ihtiyacım var - ama anahtar nerede tanımlanıyor? Bu "id requestedValue = nil" satırı mı? Öyleyse, "requestedValue" nasıl anahtar olur? Xcode, bana "requestedValue" bildirgesinde kullanılmayan bir değişken hakkında bir derleyici uyarısı veriyor. Burada bir şey özlüyorum gibi hissediyorum.

Sunduğunuz her türlü yardım için şimdiden teşekkür ederiz.

cevap

28

requestedValue hiçbir şey ifade etmiyor ve açıkçası kullanılmıyor (belki de bu örnek kodun & kodunu kesen başka bir parçanın parçasıydı - kim bilir). Bunu görmezden gelebilirsin.

Sözlük için anahtarlar, getirdiğiniz ve modelinizde tanımladığınız özellikler ile aynıdır. Örneğin, üç özniteliği tanımlanmış bir kişi, adı, yaşı, telefon numarası ve yalnızca ad isteğinde bulunduysanız, bu, sözlüklerinizdeki verileri içeren tek anahtar olabilir. Yani: Bob Sally, Joe Freida ve Sue adlı veri deposunda 5 kişi varsa

[request setEntity:entity]; 
[request setResultType:NSDictionaryResultType]; 
[request setReturnsDistinctResults:YES]; 
[request setPropertiesToFetch:[NSArray arrayWithObject:@"name"]]; 

// Execute the fetch 
NSError *error; 
NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error]; 
if (objects == nil) { 
    abort(); 
} 
for(NSDictionary* obj in objects) { 
    NSLog(@"Person: %@", [obj objectForKey:@"name"]); 
} 
// ... 

Yani, o isimler çıktısını görecekti. Diğer özelliklerden herhangi birini (yaşlarına benzer) kullanmak isterseniz, bunu setPropertiesToFetch:'da ayarladığınız diziye eklemeniz gerekir. Ancak, çoğu durumda, yönetilen nesneyi basitçe almak en iyisidir. Nesne arızalı olacak, böylece onlara erişmediğiniz sürece öznitelikleri belleğe bile getirmeyeceksiniz. Ayrıca, nesnelerde değişiklik yapmak isterseniz, bunları depoya (yönetilen nesnelerle) alabilirsiniz.

+1

Mükemmel - yardım için teşekkürler. Çekirdek Veri Parçacıkları gerçekten faydalıdır, ancak yeni bir kullanıcıysanız, hayal gücüne biraz yer bırakmışlardır. Yardımın için teşekkürler! – Andy

+4

hayal gücüne “küçük” mü? HERŞEYİ hayal gücüne bırakıyorlar. Tek bilgi kaynağım Apple tarafından yazılan dokümanlar her defasında kendimi cezbedebilme isteğini hissediyorum. Neyse ki, Apple tarafından yazılan belirsiz şifreleme mesajlarını anlatabilmemize yardımcı olan Jason Coco ve diğerleri gibi birçok çok sayıda prosesi olan StackOverflow var. Apple harika ürünler yapar, ancak doktorları sonsuzluk kare + 1'i emer. – SpaceDog

+2

SetReturnsDistinctValues ​​setReturnsDistinctResults – mishod

İlgili konular