Как вставить основную запись данных, связанную с другой, без дублирования - PullRequest
5 голосов
/ 04 мая 2011

У меня есть два основных объекта данных, Articles и Favorite.Articles имеет отношение ко-многим к Favorite.Сначала я успешно вставил все объекты Articles.

Сейчас я пытаюсь вставить ArticleID в «Избранный» объект, но не могу.Либо запись вставляется с пустой связью, либо она вставляется с новой записью в сущности «Статьи».

Я думаю, что сначала я должен получить связанную запись в сущности 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) { 
        // ?????????????????????????

    }

}

Любые предложения будут оценены.

Ответы [ 2 ]

4 голосов
/ 04 мая 2011

Во-первых, убедитесь, что у вас есть взаимные, т.е. двусторонние отношения между Article и Favorite.Примерно так:

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

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

Определение взаимных отношений в Базовых данных означает, что установка отношения с одной стороны автоматически устанавливает его для другой.

Таким образом, чтобы установить новый 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уже существует, вы должны сначала получить объект, но установка отношения будет работать точно так же.

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

0 голосов
/ 06 мая 2011

Я решил это, создав новый объект Article:

Articles *NewObj = [fetchedObjects objectAtIndex:0];

и использовал его для вставки отношения:

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

большое спасибо TechZen ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...