0

私はこのオブジェクトを持っています(無関係な属性を削除しました):

HFAppointment; id: 0xd8ec6f0 <x-coredata://2AA46AB1-11AF-431B-9289-63DEFCDAFED6/HFAppointment/p2> ; data: {
    cost = 60;
    deleted = 0;
})

この簡単なコードと共に:

[appointment setDeleted:[NSNumber numberWithInt:1]];
[appointment setCost:[NSNumber numberWithInt:1]];

問題は、このコードを実行した後、次のようになることです。

HFAppointment; id: 0xd8ec6f0 <x-coredata://2AA46AB1-11AF-431B-9289-63DEFCDAFED6/HFAppointment/p2> ; data: {
    cost = 1;
    deleted = 0;
})

サブクラスは次のNSManagedObjectようになります。

ヘッダ:

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

@interface HFAppointment : NSManagedObject

@property (nonatomic, retain) NSNumber * cost;
@property (nonatomic, retain) NSNumber * deleted;

@end

実装:

#import "HFAppointment.h"

@implementation HFAppointment

@dynamic cost;
@dynamic deleted;

@end

それだけです。そのクラスのカスタム セッターまたはゲッターはありません。プロジェクト全体での出現を検索しましたがdeleted、述語でのみ使用されています。そのセッターを使用する他のクラスはありません。

NSManagedObjectサブクラスを削除して再作成しようとしましたが、成功しませんでした。また、シミュレーターからアプリを削除しようとしましたが、クリーン ビルドを実行しても無駄でした。

レコードの場合、deleted属性は次のようになります (Integer 32 に変更したり、デフォルト値を削除したり、int32_t代わりに使用しNSNumberても効果はありません)。

ここに画像の説明を入力

何か案は?

4

1 に答える 1

3

数え切れないほどの時間を無限に検索した後、解決策は単純ですが、あいまいであることがわかりました。

この記事deletedを読んで、明らかに CoreData の予約済みキーワードであることがわかりました。属性の名前を変更するだけで問題が解決しました。私の回答を裏付けるキーワードのリストが見つからないので、誰かがそのようなリストを知っている場合は、遠慮なく投稿してください。

NSPropertyDescriptionのドキュメントではoptional、 、 、transientおよびについて言及されていますがreadOnly、それが私が見つけたすべてであり、それらを使用してはならないことは明らかではありません。

非常に厄介な部分は、XCode がこれに関連する警告をまったく発行しなかったことです。

于 2013-10-20T16:51:11.437 に答える