2014-12-19 4 views
2

У меня есть проект coredata один для многих. Вот мой .h:coredata одно для многих отношений CoreDataGeneratedAccessors

@class Categories, Tags; 

@interface Content : NSManagedObject 

@property (nonatomic, retain) NSString * title; 
@property (nonatomic, retain) NSString * body; 
@property (nonatomic, retain) Categories *category; 
@property (nonatomic, retain) NSSet *tags; 
@end 

@interface Content (CoreDataGeneratedAccessors) 

- (void)addTagsObject:(Tags *)value; 
- (void)removeTagsObject:(Tags *)value; 
- (void)addTags:(NSSet *)values; 
- (void)removeTags:(NSSet *)values; 

Вот моя реализация:

NSError *error = nil; 

    // Categories: 

    NSManagedObjectContext *moc = [self managedObjectContext]; 
    NSEntityDescription *contentDescription = [ NSEntityDescription entityForName:@"Categories" inManagedObjectContext:moc]; 

    NSFetchRequest *categoRequest = [NSFetchRequest new]; 
    categoRequest.entity = contentDescription; 
    NSPredicate *categoPredicate = [NSPredicate predicateWithFormat:@"category like %@", _dropMenuOulet.stringValue]; 
    categoRequest.predicate = categoPredicate; 

    NSArray *results = [moc executeFetchRequest:categoRequest error:&error]; 

    Categories *catego = (Categories*) [results objectAtIndex:0]; 

// Tags: 

    NSEntityDescription *tagsDescription = [ NSEntityDescription entityForName:@"Tags" inManagedObjectContext:moc]; 
    NSFetchRequest *tagsRequest = [NSFetchRequest new]; 
    tagsRequest.entity = tagsDescription; 
    NSArray *tagsResults = [moc executeFetchRequest:tagsRequest error:&error]; 

    NSMutableArray *tagArray = [ NSMutableArray new]; 


    for (NSManagedObject *obj in tagsResults) 
    { 

     //firstName = [obj valueForKey:@"firstName"]; 
     Tags *storeTag = [obj valueForKey:@"tag"]; 
     [tagArray addObject:storeTag]; 
    } 
    Content *content1 = [NSEntityDescription insertNewObjectForEntityForName:@"Content" inManagedObjectContext:moc]; 

    content1.category = catego; 
    content1.title = _titleOutlet.stringValue; 
    content1.body = _bodyOutlet.stringValue; 

    NSMutableSet *tagSet = [NSMutableSet set]; 

    for (int i = 0 ; i <tagArray.count; i++) 
    { 
     Tags *myTag = [tagArray objectAtIndex:i ]; 
     [tagSet addObject:myTag]; 

    } 

    content1.tags = tagSet; 

Но на этой линии "content1.tags = множества ярлыков;" Я получаю следующую ошибку:

[NSTaggedPointerString managedObjectContext]: unrecognized selector sent to instance 0x696669637355 
NSTaggedPointerString managedObjectContext]: unrecognized selector sent to instance 0x696669637355 

Я буду очень признателен, если вы знаете, что я делаю неправильно, чтобы получить эту ошибку.

ответ

3

Похоже, что ваш NSMutableSet *tagSet содержит объекты (вероятно, NSString экземпляров), которые не являются Tags экземплярами.

На этих линиях:

Tags *storeTag = [obj valueForKey:@"tag"]; 
[tagArray addObject:storeTag]; 

Вы добавляете атрибут tag, а не сам Tags экземпляр.

Может просто заменить эти две строки с:

[tagArray addObject:obj]; 
+0

Unrelated, но почему вы создаете массив просто итерацию через него несколько строк позже, чтобы создать свой набор? Как только код работает, вы можете немного оптимизировать его. – picciano

+0

спасибо, что эта работа великолепна, но если я хочу содержимое тегов на содержимое, я получаю теги = ""; , Как я могу получить доступ к тегам контента? – user2924482

+0

Я не совсем понимаю ваш вопрос. Но в любом случае я бы предложил опубликовать новый вопрос, а не спрашивать в комментариях. Это станет намного лучше в сообществе. – picciano

Смежные вопросы