если я сделаю то же самое с UIViewController вместо UIView, тогда он будет работать отлично

#iphone #objective-c #uiview #delegates

#iPhone #objective-c #uiview #делегаты

Вопрос:

Сначала загружается UIView из UIViewController

 myView *bso =[[myView alloc] init];
bso.assignProperty = object;
[self.view addSubview:bso];
  

MyView.m

 -(id) init{
    return [[[NSBundle mainBundle] loadNibNamed:@"MyXib" owner:self options:nil] objectAtIndex:0];
}
  

при нажатии на кнопку UIView свойство равно нулю

 - (IBAction)click:(id)sender{
    self.assignProperty // always is nil
}
  

если я сделаю то же самое с UIViewController вместо UIView , тогда он будет работать отлично.

Спасибо

Ответ №1:

Вы не должны возвращать это из init ; попробуйте:

 -(id) init{
if ((self = [super init])) {
[[NSBundle mainBundle] loadNibNamed:@"MyXib" owner:self options:nil];
}
return self;
}
  

Или, в качестве альтернативы, удалите init метод из myView и вместо вашего верхнего кода выполните:

 myView *bso = nil;
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyXib" owner:self options:nil];
for (id o in nib) {
  if ([o isKindOfClass:[myView class]]) {
    bso = o;
    break;
  }
}
if (bso) {
  bso.assignProperty = object;
  [self.view addSubview:bso];
} else {
  NSLog(@"ERROR: Could not load bso!");
}
  

Также обратите внимание, что вызов вашего класса myView сбивает с толку — программисты Obj-C ожидают, что классы будут начинаться с заглавной буквы.

Комментарии:

1. Если я не верну [[NSBundle mainBundle] loadNibNamed:@"MyXib" owner:self options:nil]; , не загружайте xib. Проблема заключается в том, что при щелчке в IBAction из UIView