0

我有一个Series具有瞬态 attr的核心数据实体indexCurrent。当外部类访问indexCurrent时,我希望他们发送一个 arg,可用于检查indexCurrent在返回之前是否需要更新 的值。因此,我已将其声明indexCurrent为私有变量,并且仅允许通过带有 arg 的特殊方法进行外部访问。

但是,尽管编译器发出“未找到方法”警告,但它允许外部类同时调用indexCurrentand setindexCurrent:,并且此错误代码完全成功执行。

这是Series界面:

@interface Series : NSManagedObject {
@private
NSNumber *indexCurrent;  
}

indexCurrent未进行属性化,未在实现文件中声明为动态,并且我没有编写indexCurrentsetindexCurrent:访问器。

我究竟做错了什么?我怎样才能使indexCurrent私有?

4

1 回答 1

2

@dynamic 不会导致生成任何代码。无论您是否使用@dynamic,Core Data 都会为属性访问器生成代码。@dynamic 只是通知编译器将生成代码,因此它不需要警告缺少方法。这就是您收到警告但没有运行时错误的原因。

实例变量上的 @private 没有多大作用。默认是@protected,这意味着外部类无论如何都无法访问它,只能访问类本身和子类。在任何情况下,默认的 Core Data 访问器都不使用实例变量。

我不确定如何做你想做的事。

于 2011-10-14T17:47:12.800 回答