1

1 つのエンティティとそのエンティティの 2 つの属性で CoreData を使用しています。
エンティティ: Binder
属性: Name, lastOpened
,br>エンティティの新しいオブジェクトを問題なく挿入でき、名前も設定できますが、lastOpened 属性を設定できません。
これが私のコードです:

Binder *newBinder = [NSEntityDescription insertNewObjectForEntityForName:@"Binder" inManagedObjectContext:context];
[newBinder setName:@"Binder"];
[newBinder setLastOpened:[NSDate date]]; //Tried this first
newBinder.lastOpened = [NSDate date]; //No compiler warning either

ただし、アプリを実行すると、-[Binder setLastOpened:]: unrecognized selector sent to instance 0x9688870

表示されているメモリ アドレスが実際には正しい Binder オブジェクトであることを確認できるというエラーが表示されます。ある属性を設定できるのに別の属性を設定できない理由について何か考えはありますか? ありがとう。
Binder.h:

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@class Cards;

@interface Binder : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSDate * lastOpened;
@property (nonatomic, retain) NSSet *cards;
@end

@interface Binder (CoreDataGeneratedAccessors)

- (void)addCardsObject:(Cards *)value;
- (void)removeCardsObject:(Cards *)value;
- (void)addCards:(NSSet *)values;
- (void)removeCards:(NSSet *)values;

@end

Binder.m:

#import "Binder.h"
#import "Cards.h"


@implementation Binder

@dynamic name;
@dynamic lastOpened;
@dynamic cards;

@end
4

3 に答える 3

1

Xcode は、xcdatamodel への変更を再構築する際に失敗することがあります。次回は、クリーンビルドを試してみてください。

また、クラス名の文字列をハード コアにしないでください。リファクタリングが壊れるからです。

[NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Binder class]) inManagedObjectContext:context]

また、クラス名と管理対象オブジェクトにプレフィックスを追加します。(例えば、Binder よりも XYZBinder を好む)。名前空間の競合の将来の悲しみを回避できます。

于 2013-03-29T18:48:27.597 に答える
0

何が問題なのかわかりませんが、Binder.h/.m ファイルを削除して再作成したところ、動作するようになりました。古いものと新しいものとの唯一の違いは、'name' と 'lastOpened' の場所が入れ替わっていることです。助けてくれてありがとう。

新しい Binder.h:

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@class Cards;

@interface Binder : NSManagedObject

@property (nonatomic, retain) NSDate * lastOpened;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *cards;
@end

@interface Binder (CoreDataGeneratedAccessors)

- (void)addCardsObject:(Cards *)value;
- (void)removeCardsObject:(Cards *)value;
- (void)addCards:(NSSet *)values;
- (void)removeCards:(NSSet *)values;

@end

新しい Binder.m:

#import "Binder.h"
#import "Cards.h"


@implementation Binder

@dynamic lastOpened;
@dynamic name;
@dynamic cards;

@end
于 2013-03-29T17:02:18.290 に答える
0

プロジェクトに Binder という名前の別のクラスが既に読み込まれている可能性があります。XCode で CoreData エンティティのクラス名を BinderMO のような名前に設定して、クラス ファイルを再作成してみてください。

于 2013-03-29T16:40:10.793 に答える