如何添加元素NSOrderedSet的核心数据?(How to add element to NSO

2019-07-31 10:12发布

我做了一些这方面的研究职位 。 但没有其解决方案的工作对我来说。 让我来解释我做了什么:

它实际上与所提到的职位非常相似。

Category.h

@class Category, Item;

@interface Category : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSOrderedSet *items;
@property (nonatomic, retain) Category *parentcategory;
@property (nonatomic, retain) NSSet *subcategories;

@end

@interface Category (CoreDataGeneratedAccessors)

- (void)insertObject:(Item *)value inItemsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromItemsAtIndex:(NSUInteger)idx;
- (void)insertItems:(NSArray *)value atIndexes:(NSIndexSet *)indexes;
- (void)removeItemsAtIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectInItemsAtIndex:(NSUInteger)idx withObject:(Item *)value;
- (void)replaceItemsAtIndexes:(NSIndexSet *)indexes withItems:(NSArray *)values;
- (void)addItemsObject:(Item *)value;
- (void)removeItemsObject:(Item *)value;
- (void)addItems:(NSOrderedSet *)values;
- (void)removeItems:(NSOrderedSet *)values;
- (void)addSubcategoriesObject:(Category *)value;
- (void)removeSubcategoriesObject:(Category *)value;
- (void)addSubcategories:(NSSet *)values;
- (void)removeSubcategories:(NSSet *)values;

@end

在我的视图控制器,我加载类别之一:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:kEntityCategory];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor
                                                    sortDescriptorWithKey:kAttributeCategoryName ascending:YES
                                                    selector:@selector(localizedCaseInsensitiveCompare:)]];

NSError *error = nil;
AppDelegate* appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

NSArray* data = [appDelegate.dataCenter.document.managedObjectContext executeFetchRequest:request error:&error];
if ( data.count > 0)
{
    self.category = [data objectAtIndex:0];
}

我在测试用的导航栏上的按钮。 当它被点击我要复制的第一个项目,并添加到末尾。

Item* item = [self.category.items objectAtIndex:0];

[self.category willChangeValueForKey:@"items"];
NSMutableOrderedSet *tempSet = [NSMutableOrderedSet orderedSetWithOrderedSet:self.category.items];
[tempSet addObject: item];
self.category.items = tempSet;
[self.category didChangeValueForKey:@"items"];

问题是该项目未添加到数据库中的。 (我做了一些测试,比如我修改的项目内容,证明了该数据库有一点问题都没有。)但是我不知道为什么这个项目是不是到数据库。 任何人都可以帮忙吗? 谢谢

Answer 1:

迅速:

let mutableItems = items.mutableCopy() as! NSMutableOrderedSet
mutableItems.addObject(anItem)
items = mutableItems.copy() as! NSOrderedSet

Objective-C的:

NSMutableOrderedSet *mutableItems = (NSMutableOrderedSet *)items.mutableCopy;
[mutableItems addObject:anItem];
items = (NSOrderedSet *)mutableItems.copy;


Answer 2:

的问题就迎刃而解了。 有两个问题:

  1. 无法插入/添加现有项目
  2. 我有一个愚蠢的名称冲突。 所以建议这个帖子是好的。

谢谢。



Answer 3:

这样做的另一种方法是用mutableOrderedSetValueForKey中的NSKeyValueCoding功能。 你可以说

owningObject.mutableOrderedSetValueForKey("items").addObject(anItem)

不幸的是,这并不让你的编译时检查“的项目。”



文章来源: How to add element to NSOrderedSet for Core Data?