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,transientreadOnly,但这就是我能找到的全部内容,而且还不清楚它们不能被使用。

最烦人的部分是 XCode 从未发出任何与此相关的警告,所以这确实是猜测工作。

于 2013-10-20T16:51:11.437 回答