если я делаю то же самое с UIViewController вместо UIView, то это работает отлично - PullRequest
0 голосов
/ 03 ноября 2011

Сначала загружается 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 свойство имеет значение nil

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

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

Спасибо

1 Ответ

1 голос
/ 03 ноября 2011

Вы не должны возвращать это из 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 ожидают, что классы начнутся с заглавной буквы.

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