Я новичок в разработке для iOS и провожу некоторые тесты с основными данными.Все было хорошо, пока я не начал играть с отношениями.В контексте:
У меня есть 2 объекта: статья и категория.
Статья состоит из двух элементов: idArticle и text.Статьи должны иметь одну категорию.Категория состоит из двух членов: idCategory и name.Категория может иметь 0 или несколько статей.
Статья:
- idArticle
- текст
- категория (отношение к категории, обратная = статьи, минимумнеобязательно, максимум 1)
Категория:
- idCategory
- name
- статьи (Для многих Отношение к статье, Inverse = категория, минимум необязательно, максимум неограниченно)
Пока я добавляю статью.Я первый сюрприз, что у меня есть не только article1.category, но и article1.idCategory и article1.name!В настоящее время я установил все свои атрибуты, отношения по желанию.Что бы я ни делал, когда я добавляю новую статью, используя приведенный ниже код, она также добавляет новую категорию, которая будет содержать idCategory = 0 и name = nil, если я не установлю article.idCategory и article.name!или к соответствующему значению, если я их установлю.Однако я не хочу, чтобы он создавал эту категорию, я просто хочу добавить существующую категорию.article.category работает отлично;это добавить статью в нужную категорию!Если бы я только установить article.category;article.idCategory will = 0 и article.name = nil.
Полагаю, я могу удалить только что созданную категорию, но хочу, чтобы мой код был аккуратным.У меня есть поиск в Интернете, но я не нашел подобный пример с этой проблемой.Я не имею дело с любым GUI здесь.Мой код:
- (BOOL)createNewGmtArticle:(NSNumber*)articleID title:(NSString*)paramTitle text:(NSString*)paramText date:(NSDate*)paramDate categoryID:(NSNumber*)paramCategoryID categoryName:(NSString*)paramCategoryName
{
GasMattersTodayArticles *gmtArticle = [NSEntityDescription insertNewObjectForEntityForName:@"GasMattersTodayArticles" inManagedObjectContext:self.managedObjectContext]; // Look the given entitiy GasMattersTodayArticles in the given managed obj context
if(gmtArticle != nil)
{
// Fill article
gmtArticle.idArticle = articleID;
gmtArticle.text = paramText;
gmtArticle.category = [self getGmtCategoryWithId:paramCategoryID];
//gmtArticle.idCategory = gmtArticle.category.idCategory;
//gmtArticle.name = gmtArticle.category.name;
NSError *savingError = nil;
if([self.managedObjectContext save:&savingError]) // flush all unsaved data of the context to the persistent store
{
NSLog(@"Successfully saved the context");
return YES;
}
else
{
NSLog(@"Failed to save the context. Error = %@", savingError);
return NO;
}
}
NSLog(@"Failed to create the new article");
return NO;
}
и
-(GasMattersTodayCategory *)getGmtCategoryWithId:(NSNumber*)categoryID
{
// Create the fetch request first
NSDictionary *subs = [NSDictionary dictionaryWithObject:categoryID forKey:@"SEARCH_KEY"];
NSFetchRequest *fetchRequest = [self.managedObjectModel fetchRequestFromTemplateWithName:@"CategoryWithKey" substitutionVariables:subs];
// Entity whose contents we want to read
NSEntityDescription *entity = [NSEntityDescription entityForName:@"GasMattersTodayCategory" inManagedObjectContext:self.managedObjectContext];
// Tell the request that we want to read the content of the person entity
[fetchRequest setEntity:entity];
// Excecute the fetch request on the context
NSError* requestError = nil;
GasMattersTodayCategory *category = [[self.managedObjectContext executeFetchRequest:fetchRequest error:&requestError] lastObject];
// Make sur we get a category
if(category != nil)
{
return category;
}
else
{
NSLog(@"Could not find any Category entities with this Id in the context.");
return nil;
}
}
Спасибо!Это супер базовое задание в настоящее время разрушает мое воскресенье!