2011-09-15 13 views
18

'a uygulanıyor "RemainingGaneProjections" adlı temel veri modelimde tanımlanan getirme isteğim var. Bu getirme isteğini yürütmek ve sonuçları varlığın özniteliklerinden birine göre sıralamak istiyorum.Şablondan oluşturulan NSFetchRequest öğesinin sıralama tanımlayıcısı

NSFetchRequest *projectionsRequest = [model fetchRequestTemplateForName:@"RemainingGameProjections"]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"confidence" ascending:NO]; 
[projectionsRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 

Ben aşağıdaki iletiyle çöker bu kodu çalıştırmak çalıştığınızda: Bu çarpışma olur ayıklayıcısında doğruladı

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Can't modify a named fetch request in an immutable model.' 

Ben setSortDescriptors yöntemi yürütmek ne zaman kodu şöyle NSFetchRequest üzerinde. Bunun neden olduğunu anlayamadım.

Burada olup bitenler için herhangi bir açıklama var mı? Sıralanması gereken verileri alırken kullanmam gereken başka bir yaklaşım var mı?

cevap

35

Yanıtı, Apple'ın tüm yerlerinde belgelerine kendim buldum. Getirme isteğimin herhangi bir değiştirme parametresi olmadığından fetchRequestFromTemplateWithName yerine fetchRequestTemplateForName yöntemini kullandım. Şablon ikame değerlerini yoksa ortamınızda ya da,

:

  1. Kullanım fetchRequestFromTemplateWithName: substitutionVariables: ve değişkenler olarak nil geçmesi Sonradan anlaşıldı ki, Çekirdek Veri programlama kılavuzu bu diyor argüman;
  2. FetchRequestTemplateForName: ve sonucunu kopyalayın. fetchRequestTemplateForName: tarafından döndürülen getirme isteğini kullanmaya çalışırsanız, bu durum bir istisna oluşturur ("Değiştirilemeyen bir modelde adlandırılmış getirme isteğini değiştiremez" (" ").

bunu yapmak benim getirme isteği başlatma modifiye:

NSFetchRequest *projectionsRequest = [[model fetchRequestTemplateForName:@"RemainingGameProjections"] copy]; 

ve beklendiği gibi şimdi her şey çalışıyor.

+0

Ayrıca, "projectionsRequest" için karşılık gelen bir 'release 'eklediğinizi varsayalım. –

+12

Nope - Bu proje için ARC kullanıyorum;) –