2010-11-30 2 views
1

コアデータに質問があります。Core-Data:同じ名前の多くのオブジェクトで、あるオブジェクトから特定のオブジェクトへの関係を設定する方法は?

プロジェクトには2つのエンティティがあります。BooksPagesです。 エンティティBooksに作成されたオブジェクトbookのユーザーが3人あります。 エンティティPagesに複数のオブジェクトpageが作成されています。 の関係はpageに属し、bookに属し、bookには複数のページがあります。

と私の質問:同じオブジェクト名 "book"を持つ3つのbookがあり、それぞれ固有の属性.bookName@"metal"があります。 @"plastic"; @"glass"pagebookに設定する方法を.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? 

をお読みいただきありがとうございました、私は次のようにここに立ち往生!

答えて

1

特定の書籍を探す必要がある場合は、NSFetchRequestを使用してコアデータを尋ねる必要があります。

+(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

素晴らしい!このメソッドの後に、これを考えたことはありませんでした。.bookName = @ "glass"のオブジェクトブックが配列にあり、次に "for(NSManagedObject * book in objects){page.itsbook = book;}" PeyloW's Fetchの@ "glass"の本には、それだけです!ありがとう、私は後でそれをテストします。参照元:http://stackoverflow.com/questions/1383598/core-data-quickest-way-to-delete-all-instances-of-anentity – flutewang

1

私はあなたが何を意味するか分かりません。あなたが本のサブセットとしてページを挿入したい場合は、このコード行をしたい:

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

ページオブジェクトから本を取得したい場合は、へのページから逆の関係が必要になります本。

+0

[ブックaddPageToBookObject:ページ]、トーマスをありがとう:あなたはおそらく次のようになりますあなたのBookクラスにな便利メソッドを追加するよう

かなりいくつかのコードは、必要とされています。は設定するのが良いですが、Entityには3つの "ブック"オブジェクトがあります:book.bookName = @ "metal"; book.bookName = @ "plastic"; book.bookname = @ "glass"、 "page"を@ "glass"に設定します。 – flutewang

関連する問題