2010-11-30 4 views
1

J'ai une question dans les données de base:Core-Data: Comment configurer la relation d'un objet à un objet spécifique dans de nombreux objets avec le même nom?

il y a 2 Entités dans le projet, Books et Pages; il y a 3 objets book s utilisateur créé dans l'entité Books; il y a plusieurs objets page s utilisateur créé dans l'entité Pages; relation inbetween est l'un page appartient à un book, un book a beaucoup de pages.

et ma question: il y a 3 book avec le même nom d'objet "livre", et chacune a un attribut unique .bookName: @"metal"; @"plastic"; @"glass". comment définir page à book avec .bookName = @"glass"?

//In BookViewController 
    Books *book = (Books *)[NSEntityDescription insertNewObjectForEntityForName:@"Books" inManagedObjectContext:managedObjectContext]; 
    //textView.text is user input text 
    book.bookName = textView.text; 


    //In PageViewController 
    Pages *page = (Pages *)[NSEntityDescription insertNewObjectForEntityForName:@"Pages" inManagedObjectContext:managedObjectContext]; 
    page.itsbook = WHAT? 

Merci de votre lecture, je suis resté ici comme: un jour, j'apprécie vraiment votre aide, je vous aime!

Répondre

1

Si vous avez besoin de trouver un livre spécifique, vous devez utiliser un NSFetchRequest pour demander des données de base à ce sujet.

Très peu de code est nécessaire, donc vous ajoutez probablement une méthode Convinience à votre classe Book qui ressemble à ceci:

+(Book*)bookWithName:(NSString*)name 
{ 
    // 0. I assume you have something like this to get the context… 
    NSManagedObjectContext* context = [NSManagedObjectContext threadLocalContext]; 

    // 1. Create an empty request 
    NSFetchRequest* request = [[[NSFetchRequest alloc] init] autorelease]; 

    // 2. Set the entity description for the object to fetch 
    NSEntityDescription* entity = [NSEntityDescription entityForName:@"Book" 
               inManagedObjectContext:context]; 
    [request setEntity:entity]; 

    // 3. Set a predicate asking for objects with a mathing bookName property 
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"%K LIKE[cd] %@", 
                   @"bookName", 
                   name]; 
    [request setPredicate:predicate]; 

    // 4. Execute the request on the managed object context. 
    NSArray* objects = [context executeFetchRequest:request error:NULL]; 

    // 5. Result is an array, maybe handle empty array and many objects? 
    return [objects lastObject]; 
} 
+0

Super! jamais pensé cela avant, après cette méthode, le livre d'objet avec .bookName = @ "verre" est dans le tableau, est ensuite "pour (NSManagedObject * livre dans les objets) {page.itsbook = livre;}" cette déclaration définit la page au livre @ "glass" du Fetch de PeyloW, c'est tout! merci beaucoup, je vais le tester plus tard. référence de: http://stackoverflow.com/questions/1383598/core-data-quickest-way-to-delete-all-instances-of-an-entity – flutewang

1

Je ne suis pas sûr de ce que vous voulez dire. Si vous souhaitez insérer une page comme un sous-ensemble du livre que vous voulez que cette ligne de code:

[book addPageToBookObject:page]; // the method will be the relationship name 

Si vous voulez obtenir le livre de l'objet page vous aurez besoin d'une relation inverse des pages à la livre.

+0

merci, Thomas, [livre addPageToBookObject: page]; est bon à définir, mais il y a 3 objets "livre" dans l'Entité: book.bookName = @ "metal"; book.bookName = @ "plastique"; book.bookName = @ "verre", veulent mettre "page" au @ "verre" un. – flutewang

Questions connexes