Почему я не могу превратить этот объект в переменную экземпляра? - PullRequest
0 голосов
/ 03 сентября 2011

У меня есть объект, который я хочу превратить в переменную экземпляра.Это работает:

ZipFile *newZipFile = [[ZipFile alloc] initWithFileName:zipPath mode:ZipFileModeCreate];

Но когда я пытаюсь изменить его на это, оно не работает:

.h:

@interface PanelController : NSWindowController <NSWindowDelegate> {
  ZipFile *_zipFile;
}
@property (nonatomic, assign) ZipFile *zipFile;

.m:

@synthesize zipFile = _zipFile;
...
// get a syntax error here
zipFile = [[ZipFile alloc] initWithFileName:zipPath mode:ZipFileModeCreate];

РЕДАКТИРОВАТЬ: я смог это исправить, поместив это в свой интерфейс и избавившись от @property:

ZipFile *newZipFile; 

Я думаю, я не могу назначить сеттеры и геттеры только длялюбой объект?Но почему это не сработает, если я сделаю:

ZipFile *zipFile;

Ответы [ 2 ]

5 голосов
/ 03 сентября 2011

Ивара с именем zipFile нет. Вы имели в виду:

_zipFile = [[ZipFile alloc] initWithFileName:zipPath mode:ZipFileModeCreate];

или

self.zipFile = [[[ZipFile alloc] initWithFileName:zipPath mode:ZipFileModeCreate] autorelease];

Примечание: Возможно, вы хотите, чтобы ваша собственность была retain. assign для свойств, которыми вы не владеете (например, для делегатов). assign свойства небезопасны, потому что могут легко стать висящими указателями.

3 голосов
/ 03 сентября 2011
@synthesize zipFile = _zipFile;
...
// get a syntax error here
zipFile = [[ZipFile alloc] initWithFileName:zipPath mode:ZipFileModeCreate];

Ваш @synthesize говорит, что ваше свойство называется zipFile, но переменная, поддерживающая его, _zipFile.

У вас нет переменной zipFile, поэтому строка назначения неверна.

_zipFile = [[ZipFile alloc] initWithFileName:zipPath mode:ZipFileModeCreate];

правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...