геттеры и сеттеры для пользовательских классов

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

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

//  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:». Объект не может быть установлен — либо свойство только для чтения, либо установщик не найден».


person node ninja    schedule 19.09.2010    source источник


Ответы (1)


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

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

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

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

person Jacob Relkin    schedule 19.09.2010