2011-01-09 33 views
7

silmek Neden prepareForDeletion değildir: yöntemini denilen olsun?CoreData nesneyi

Ben onun atası ilişkisini kullanarak bir nesneyi siliyorum:

"doc" nesne beklendiği gibi silinir, ama onun prepareForDeletion yöntemi ... çağrılan asla
[folder removeDocumentObject: doc]; 

= \

cevap

16

o Çünkü değil silinmesini :)

[folder documentObject] ise döner bu sadece iki nesne arasındaki ilişki olmadığı anlamına gelir nil. Nesnenin temel verilerden silindiği anlamına gelmez.

bu deneyin:

[[doc managedObjectContext] deleteObject:doc]; 

DÜZENLEME

Sorununu test ettik bu kodu kullanarak: Ben Çekirdek veri bir belge ve Klasör nesne ile yeni bir proje yaptık

- Klasör ilişkisinde kaset kümesiyle birlikte < < -> klasörüne ayarlanır.

// Create a document and folder and save them 
Folder *fol = [NSEntityDescription insertNewObjectForEntityForName:@"Folder" inManagedObjectContext:[self managedObjectContext]]; 
Document *doc = [NSEntityDescription insertNewObjectForEntityForName:@"Document" inManagedObjectContext:[self managedObjectContext]]; 
[doc setFolder:fol]; 
[[self managedObjectContext] save:nil]; 

// Get the document's object id for later 
NSManagedObjectID *documentId = [doc objectID]; 

// Delete the relationship 
[fol removeDocumentsObject:doc]; 
[[self managedObjectContext] save:nil]; 

// Try to reload the document to see if it's still there 
Document *doc2 = (Document *)[[self managedObjectContext] objectWithID:documentId]; 

// Get a property from the document - this will fault if the document has been deleted. Otherwise it 
// will work. 
NSLog(@"%@", doc2); 
NSLog(@"%@", [doc2 title]); 

// Now delete specifically and try again 
[[self managedObjectContext] deleteObject:doc]; 
[[self managedObjectContext] save:nil]; 

// Should get a fault here 
doc2 = (Document *)[[self managedObjectContext] objectWithID:documentId]; 
NSLog(@"%@", doc2); 
NSLog(@"%@", [doc2 title]); 

ilk iki NSLog ifadeleri düzgün çalışması - Ben belgenin bir açıklama ve başlık için bir dize olsun.

belge artık deposunda var olmadığından ikinci NSLog ifadeleri kazasında.

Bu sadece bir ilişkiyi çıkarmadan mağazadan Belgesi kaldırmak için yeterli olmadığını söylüyor - Açıkça silmeniz gerekiyor. Ancak, silindiğini düşündüğünüzü söylüyorsunuz. Hala mağazada olup olmadığını görmek için çalıştırdığınız sorguyu gönderir misiniz?

+0

iyi bir düşünce, ama benim durumumda tanımlanan ilişkidir: klasör <----->> belge. Ve Cascade öyle "ilişki yok" demek, nesneyi silmek demektir .. – Rizon

+0

Hmmm, bu garip. Ya da silinmiş veya sizin prepareForDeletion yöntemi ile ilgili bir şey var olmak değil - Belgenin düz Sanki orada hiç sorun olup olmadığını kontrol etmek için bağlamı kaydettikten sonra alım isteği yapmak yani kaldırıldığını kendine kanıtlayabilir. (veya çekirdek verilerdeki bir hata!) – deanWombourne

+0

getirme isteğini dener - ve nesne gerçekten silinir. PrepareForDeletion yöntemim Document nesne sınıfında - (void) prepareForDeletion olarak tanımlanır {...} – Rizon

İlgili konular