如何在子类中设置只读属性?

时间:2013-12-05 18:25:22

标签: ios iphone objective-c inheritance parse-platform

MyLoginViewControllerPFLogInViewController的子类。

logInViewControllerMyLogInViewController

MainViewController.m类型的对象

//  MainViewController.m

    MyLogInViewController *logInViewController = [[MyLogInViewController alloc] init];
            logInViewController.delegate = self;
            logInViewController.fields = PFLogInFieldsUsernameAndPassword | 
                                                     PFLogInFieldsTwitter | 
                                                    PFLogInFieldsFacebook | 
                                                PFLogInFieldsSignUpButton | 
                                                PFLogInFieldsDismissButton;

正如您在fields property

中看到的MainViewController.m一样

我想在MyLogInViewController中设置此,以便每个MyLogInViewController对象都设置它。

但是,字段属于readonly类型 如下所示:https://www.parse.com/docs/ios/api/Classes/PFLogInView.html#//api/name/fields

@property (nonatomic, readonly, assign) PFLogInFields fields

  1. 如何覆盖此? (我考虑过使用自定义吸气剂 - 但不知道如何正确执行)

  2. 我试图做的是不好的做法,如果是的话,为什么?

  3. 编辑:原来我看的是View文档而不是ViewController文档。感谢mrt发现这一点。

2 个答案:

答案 0 :(得分:1)

如果有人做了一些只读的事情,并且他们知道自己在做什么,这可能意味着它真的不应该被设置在课堂之外。但是,仍有一些理由可以做你想做的事情。你为什么不在init方法中这样做?

编辑:

可以设置PFLogInViewController中的fields属性。因此,您可以在MyLogInViewController类的init方法

中执行此操作
- (id)init
{
    self = [super init];
    if (self) {
        // Do aditional init stuff
        self.fields = PFLogInFieldsUsernameAndPassword | PFLogInFieldsTwitter | PFLogInFieldsFacebook | PFLogInFieldsSignUpButton | PFLogInFieldsDismissButton;
    }
    return self;
}
这样,你就不会干扰班级的内部。

答案 1 :(得分:0)

您是否尝试过声明

@property (nonatomic, readwrite, assign) PFLogInFields fields

在您的子类中?