5

2つのコアデータエンティティがArticlesありFavoriteます。ArticlesTo-Manyとの関係がありFavoriteます。まず、すべてのArticlesオブジェクトを正常に挿入しました。

現在、「お気に入り」エンティティにArticleIDを挿入しようとしていますが、挿入できません。レコードが空の関係で挿入されるか、「Articles」エンティティに新しいレコードで挿入されます。

Articles最初にエンティティの関連レコードを取得してから、それを使用して挿入する必要があると思いますが、Favoriteこれを行う方法がわかりません。私の現在のコード:

NSManagedObjectContext *context =[appDelegate managedObjectContext] ; 
favorite *Fav =[NSEntityDescription insertNewObjectForEntityForName:@"favorite" inManagedObjectContext:context];
Articles * Article = [NSEntityDescription insertNewObjectForEntityForName:@"Articles" inManagedObjectContext:context];

NSError *error;

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription 
                               entityForName:@"Articles" inManagedObjectContext:context];  
[fetchRequest setEntity:entity]; 
NSPredicate *secondpredicate = [NSPredicate predicateWithFormat:@"qid = %@",appDelegate.GlobalQID ];
NSPredicate *thirdpredicate = [NSPredicate predicateWithFormat:@"LangID=%@",appDelegate.LangID]; 
NSPredicate *comboPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects: secondpredicate,thirdpredicate, nil]]; 
[fetchRequest setPredicate:comboPredicate];
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
for (NSManagedObject *info in fetchedObjects) { 
        // ?????????????????????????

    }

}

任意の提案をいただければ幸いです。

4

2 に答える 2

4

Articleまず、との間に相互関係、つまり双方向の関係があることを確認しますFavorite。このようなもの:

Article{
  favorites<-->>Favorite.article
}

Favorite{
  article<<-->Article.favorites
}

Core Dataで相互関係を定義するということは、一方の側から関係を設定すると、もう一方の側にも自動的に関係が設定されることを意味します。

したがって、Favorite新しく作成されたオブジェクトに新しいオブジェクトを設定するには、次のようにしArticleます。

Favorite *fav =[NSEntityDescription insertNewObjectForEntityForName:@"favorite" inManagedObjectContext:context];
Articles *article = [NSEntityDescription insertNewObjectForEntityForName:@"Articles" inManagedObjectContext:context];
[article.addFavoriteObject:fav];
//... or if you don't use custom NSManagedObject subclasses
[[article mutableSetValueForKey:@"favorites"] addObject:fav];

ArticleオブジェクトまたはオブジェクトのいずれかがFavoriteすでに存在する場合は、最初にオブジェクトをフェッチしますが、関係の設定はまったく同じように機能します。

重要なのは、管理対象オブジェクトのコンテキストが両方のオブジェクトに関係を設定することを認識できるように、相互関係があることを確認することです。

于 2011-05-04T13:25:02.177 に答える
0

新しいArticleオブジェクトを作成して解決しました。

Articles *NewObj = [fetchedObjects objectAtIndex:0];

関係を挿入するためにそれを使用します:

    [Fav setFavArticles:NewObj];
     [NewObj setArticlesFav:Fav];

TechZenに感謝します。

于 2011-05-06T14:21:54.867 に答える