Core-Data: Как установить связь между одним объектом и конкретным во многих объектах с одинаковыми именами? - PullRequest
1 голос
/ 30 ноября 2010

У меня есть вопрос в основных данных:

В проекте 2 сущности, Books и Pages; в Entity Books создано 3 объекта book с пользователем; в Entity Pages создано несколько объектов page; Отношения между ними: один page принадлежит одному book, один book имеет много страниц.

и мой вопрос: есть 3 book с одинаковым именем объекта "книга", и каждый имеет уникальный атрибут .bookName: @"metal"; @"plastic"; @"glass". как установить page на book с .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?

Спасибо за чтение, я застрял здесь, как: день, действительно ценю вашу помощь, люблю вас!

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Если вам нужно найти конкретную книгу, вам нужно использовать NSFetchRequest, чтобы запросить основные данные для нее.

Требуется совсем немного кода, так что вы, вероятно, добавите метод удобства в свой Book класс, который выглядит примерно так:

+(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];
 }
1 голос
/ 30 ноября 2010

Я не уверен, что вы имеете в виду. Если вы хотите вставить страницу как подмножество книги, вам нужна строка кода:

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

Если вы хотите получить книгу из объекта страницы, вам понадобится обратная связь между страницами и книгой.

...