1. ホーム
  2. cocoa

[解決済み] NSOrderedSetが生成するアクセサで例外が発生する。

2022-03-15 19:12:06

質問

私のLionアプリでは、次のようなデータモデルがあります。

関係 subitems 内部 Item は順序があります .

Xcode 4.1 (ビルド 4B110) は、私のためにファイルを作成しました。 Item.h , Item.m , SubItem.hSubItem.h .

の内容(自動生成)です。 Item.h :

#import <Foundation/Foundation.h>

#import <CoreData/CoreData.h>

@class SubItem;

@interface Item : NSManagedObject {
@private
}

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSOrderedSet *subitems;
@end

@interface Item (CoreDataGeneratedAccessors)

- (void)insertObject:(SubItem *)value inSubitemsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromSubitemsAtIndex:(NSUInteger)idx;
- (void)insertSubitems:(NSArray *)value atIndexes:(NSIndexSet *)indexes;
- (void)removeSubitemsAtIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectInSubitemsAtIndex:(NSUInteger)idx withObject:(SubItem *)value;
- (void)replaceSubitemsAtIndexes:(NSIndexSet *)indexes withSubitems:(NSArray *)values;
- (void)addSubitemsObject:(SubItem *)value;
- (void)removeSubitemsObject:(SubItem *)value;
- (void)addSubitems:(NSOrderedSet *)values;
- (void)removeSubitems:(NSOrderedSet *)values;

@end

そして、以下がその内容(自動生成)です。 Item.m :

#import "Item.h"
#import "SubItem.h"

@implementation Item

@dynamic name;
@dynamic subitems;

@end

ご覧の通り、クラス Item というメソッドを提供しています。 addSubitemsObject: . 残念ながら、このように使おうとすると

Item *item = [NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:self.managedObjectContext];
item.name = @"FirstItem";

SubItem *subItem = [NSEntityDescription insertNewObjectForEntityForName:@"SubItem" inManagedObjectContext:self.managedObjectContext];

[item addSubitemsObject:subItem];

というエラーが表示されます。

2011-09-12 10:28:45.236 Test[2002:707] *** -[NSSet intersectsSet:]: set argument is not an NSSet

助けてもらえますか?

更新してください。

私のバグレポートからわずか1,787日後、本日(2016年8月1日)、Appleからこんな手紙が届きました。 "この問題を最新の iOS 10 ベータビルドで検証し、結果を bugreport.apple.com でバグレポートを更新してください。 . このタイミングであることを祈りましょう :)

解決方法は?

あなたのデータモデルと私のデータモデルで、名前を変えて設定を再現してみました。どちらの場合も同じエラーが発生しました。

Appleの自動生成コードのバグのようです。