核心数据:如何在许多具有相同名称的对象中设置从一个对象到特定对象的关系?

时间:2010-11-30 13:32:15

标签: iphone core-data entity-relationship

我在核心数据中有一个问题:

项目中有2个实体,BooksPages; 在实体book中创建了3个用户Books的用户; 在实体page中创建了多个用户Pages的用户; 关系inbetween是一个page属于一个book,一个book有很多页面。

和我的问题:有3个book具有相同的对象名称“book”,每个都有唯一的属性.bookName@"metal"; @"plastic"; {{1 }}。如何使用@"glass"page设置为book

.bookName = @"glass"

感谢您的阅读,我卡在这里:一天,非常感谢您的帮助,爱你!

2 个答案:

答案 0 :(得分:1)

我不确定你的意思。如果要将页面作为书籍的子集插入,则需要以下代码行:

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

如果你想从页面对象中获取书籍,你需要从页面到书籍的反向关系。

答案 1 :(得分:1)

如果您需要查找特定图书,则需要使用NSFetchRequest向Core数据询问。

需要相当多的代码,因此您可能会为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];
 }