【问题标题】:coredata one to many relationship CoreDataGeneratedAccessors核心数据一对多关系 CoreData Generated Accessors
【发布时间】:2014-12-19 20:04:22
【问题描述】:

我有一个一对多的 coredata 项目。这是我的 .h:

@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 = tagSet;”我收到以下错误:

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

如果您知道我做错了什么导致该错误,我将不胜感激。

【问题讨论】:

    标签: ios objective-c iphone xcode core-data


    【解决方案1】:

    看起来您的 NSMutableSet *tagSet 包含不是 Tags 实例的对象(可能是 NSString 实例)。

    在这些方面:

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

    您添加的是tag 属性,而不是Tags 实例本身。

    也许只需将这两行替换为:

    [tagArray addObject:obj];
    

    【讨论】:

    • 不相关,但是为什么你创建一个数组只是为了在几行之后迭代它来构建你的集合?代码运行后,您可能需要对其进行一些优化。
    • 谢谢你这项工作很棒,但如果我想要每个内容的标签内容,我会得到 tags = ""; .如何访问内容的标签?
    • 我不太关注你的问题。但无论如何,我建议发布一个新问题而不是在 cmets 中提问。它将在社区中获得更好的知名度。
    • 我发布了一个新问题stackoverflow.com/questions/27574974/…
    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2021-06-10
    相关资源
    最近更新 更多