Почему этот метод init возвращает объект из области видимости?
Используя XCode 4.2, базовый SDK 4.3 и ARC, я пытаюсь загрузить UIView из ниба (а не UIViewController). Мне не нужно вообще использовать UIViewController в этом процессе.
После прочтения этого ответа на S.O. вопрос здесь, похоже, это можно сделать: Как загрузить UIView с помощью файла nib, созданного с помощью Interface Builder (Ответ пользователя "MusiGenesis" описывает процесс)
Я создал подкласс UIView с одной меткой:
@interface MyView : UIView
@property (unsafe_unretained, nonatomic) IBOutlet UILabel *textLabel;
@end
В реализации я переопределяю initWithFrame:
- (id)initWithFrame:(CGRect)frame
{
//self = [super initWithFrame:frame];
self = [JVUIKitUtils initWithNibName:@"MyView" withOwner:self];
if( self )
{
NSLog(@"Created");
}
return self;
}
В I.B. Я создал файл с именем "MyView.xib" с одним представлением. Он имеет метку в качестве подзадачи, и я создал свойство label, перетащив его в h файл.
И в другом файле я создал этот повторно используемый статический метод:
+ (id)initWithNibName:(NSString*)nibName withOwner:(id)uiView
{
id object = nil;
NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:nibName owner:uiView options:nil]; // 1 object, out of scope
for( id tempObject in bundle)
{
if( [tempObject isKindOfClass:[uiView class]] ) object = tempObject;
break;
}
return object;
}
Как вы можете видеть на следующем снимке экрана, в комплекте есть одна ссылка на объект, но она выходит за рамки.
И отладка:
Это мой код для создания экземпляра:
subView = [[MyView alloc] initWithFrame:CGRectZero]; // ok
NSAssert(subView != nil, @"MyView was nil"); // fail
Любые идеи о том, почему другой С.О. плакат смог заставить его работать, но это не так?