геттеры и сеттеры для пользовательских классов - PullRequest
1 голос
/ 20 сентября 2010

Если вы синтезируете пользовательский класс, создаются ли для него геттеры и сеттеры?

Это пользовательский класс, который я создал.

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


@interface MyClass : NSObject <NSCoding> {
    NSString *string1;
    NSString *string2;

}
@property (nonatomic, retain) NSString *string1;
@property (nonatomic, retain) NSString *string2;

@end

Здесь я объявляю объект этого классакак свойство

//  DetailViewController.h


#import <UIKit/UIKit.h>
#import "MyClass.h"


@interface DetailViewController : UIViewController {

    MyClass *myObject;
}
@property(nonatomic, retain) MyClass *myObject;

@end

Здесь я синтезирую объект.

#import "DetailViewController.h"
#import "MyClass.h"


@implementation DetailViewController
@synthesize myObject;

Так есть ли у него методы получения и установки?

Когда я пытаюсь запустить этот код внутри RootViewController.m

DetailViewController.myObject = [theArray objectAtIndex:indexPath.row];

Я получаю сообщение об ошибке «Доступ к неизвестному» setMyObject: «метод класса. Объект не может быть установлен - либо свойство только для чтения, либо не найден установщик».

1 Ответ

4 голосов
/ 20 сентября 2010

Только если вы объявите требуемые переменные экземпляра в качестве свойств, тогда synthesize propname;, будет создавать и устанавливать.Теперь, какой код поступает в геттеры и сеттеры, зависит от того, какие атрибуты свойств вы определяете (nonatomic / atomic, assign, retain, copy)

РЕДАКТИРОВАТЬ в пересмотренный OPвопрос: Да, будет создан метод получения / установки для переменной экземпляра myObject класса DetailViewController

DetailViewController.myObject = [theArray objectAtIndex:indexPath.row];

Вы пытаетесь установить переменная класса , которая не определена.DetailViewController относится к типу Class, а не DetailViewController.Выполните ту же операцию для экземпляра из DetailViewController, и все должно быть готово.

...