属性必须是readwrite,而其primary必须是只读的

时间:2014-04-18 16:21:04

标签: ios objective-c

我在故事板中添加了一个UITextView,我在这种情况下为UIView(称为FieldView)的子视图创建了一个属性并进行了连接。该属性是这样的

@property (strong, nonatomic) UITextView * instructions;

FieldView是viewController的属性

@property (strong, nonatomic) IBOutlet FieldView *fieldView;

当我想在viewController中使用代码隐藏UITextView *指令时,我在.h文件中声明了该属性,以便在按下按钮时最终可以执行此操作

 self.fieldView.instructions.hidden = YES;

但是,xCode给了我一个错误

 illegal redeclaration of property in class extension FieldView, attribute must be readwrite while its primary must be readonly

当我在.h和.m文件中添加readwrite

@property (weak, nonatomic, readwrite) IBOutlet UITextView *instructions;

it said `perhaps you intended this to be a readwrite redeclaration of a readonly public property

我正在尝试做什么的正确方法是什么?

3 个答案:

答案 0 :(得分:10)

要解决您的问题,您需要在readonly文件中声明.h属性,在readwrite文件中声明.m属性:

//FieldView.h
@interface FieldView
@property (nonatomic, readonly, strong) UITextView *instructions;
@end

// FieldView.m
@interface FieldView()
@property (nonatomic, readwrite, strong) IBOutlet UITextView *instructions;
@end

答案 1 :(得分:6)

我也有同样的问题,

如果在.h文件中声明了同名属性,并且您再次在扩展名中声明它,那么您将收到此错误。

因此,重命名属性名称将解决问题。

答案 2 :(得分:0)

对我来说,我必须删除 AppDelegate.h 中的一个属性

之前:

@property (nonatomic, strong) UMModuleRegistryAdapter *moduleRegistryAdapter;
@property (nonatomic, strong) UIWindow *window;

之后:

@property (nonatomic, strong) UIWindow *window;