Редактировать: перемещение ключевой точки вверх. Вы не можете одновременно создать объект и установить его для владельца файла в одном и том же кончике. Владелец файла должен быть уже существующим и инициализированным объектом с нулевыми выходными иварами, чтобы загрузка пера правильно подключалась к выходным отверстиям владельца.
Является ли объект делегата также в кончике? Если ничто не удерживает его (ваша собственность 'назначается'), оно может просто исчезнуть при следующем сливе из пула автоматического выпуска. Является ли делегат розеткой в вашем кончике? «nil» значения в розетках после загрузки пера обычно являются признаком того, что розетки подключены неправильно. Кроме того, кажется, что вы создаете перо с помощью объекта-владельца (self), который еще не инициализирован? Если это так, ваши розетки могут быть подключены неправильно, потому что розетки связаны только в том случае, если соответствующее значение в объекте владельца равно нулю. Вы должны иметь полностью инициализированный объект владельца, прежде чем использовать его в качестве владельца при загрузке пера.
Вот код инициализации «загрузить этот объект из пера», который я использую в одном из моих проектов:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
// Initialization code.
//
[[NSBundle mainBundle] loadNibNamed:@"ScoreView" owner:self options:nil];
[self addSubview:self.view];
}
return self;
}
- (void) awakeFromNib
{
[super awakeFromNib];
[[NSBundle mainBundle] loadNibNamed:@"ScoreView" owner:self options:nil];
[self addSubview:self.view];
}
Использование перьев имеет встроенный уровень косвенности, которого вы не можете избежать. Вы не можете создать объект и одновременно использовать его как владельца файла - владелец должен уже существовать и быть инициализирован (с нулевыми выходами) во время загрузки пера.
Используя приведенный выше код, я могу создать свой объект из кода или поместить его непосредственно в другие файлы пера - повторно используемый компонент UIView.