10

私はこの投稿についていくつかの研究をしました。しかし、その解決策はどれも私にはうまくいきません。私がしたことを説明しましょう:

ここに画像の説明を入力してください

それは実際に言及された投稿と非常に似ています。

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

ビューコントローラで、次のカテゴリの1つをロードします。

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"];

問題は、アイテムがデータベースにまったく追加されていないことです。(たとえば、アイテムの内容を変更するなど、いくつかのテストを行いました。データベースにまったく問題がないことがわかります。)しかし、アイテムがデータベースにない理由はわかりません。誰か助けてもらえますか?ありがとう

4

4 に答える 4

23

迅速:

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

目的 C:

NSMutableOrderedSet *mutableItems = (NSMutableOrderedSet *)items.mutableCopy;
[mutableItems addObject:anItem];
items = (NSOrderedSet *)mutableItems.copy;
于 2015-01-11T14:44:01.640 に答える
3

これを行う別の方法はmutableOrderedSetValueForKey、NSKeyValueCoding の関数を使用することです。あなたは言えた

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

残念ながら、これではコンパイル時に「アイテム」をチェックできません。

于 2015-07-18T19:44:11.847 に答える
3

問題は解決しました。2 つの問題があります。

  1. 既存のアイテムを挿入/追加できない
  2. 愚かな名前の競合があります。したがって、この投稿の提案は適切です。

ありがとう。

于 2012-09-07T04:24:11.053 に答える