Почему этот метод init возвращает объект из области видимости?Почему этот метод init при загрузке ниба возвращает объект из области видимости?
Используя XCode 4.2, базовый SDK 4.3 и ARC, я пытаюсь загрузить UIView из ниба (а не UIViewController). Мне вообще не нужно использовать UIViewController в этом процессе.
После прочтения этого ответа на S.O. Вопрос здесь, похоже, это может быть сделано: How to load a UIView using a nib file created with 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;
}
В IB Я создал файл с именем «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
Любые идеи о том, почему другие С.О. плакат смог заставить его работать, но это не так?
Я понятия не имею, что вы пытаетесь сделать с помощью 'self = [JVUIKitUtils initWithNibName: @" MyView "withOwner: self]', но это абсолютно * WRONG *. –
Я пытаюсь загрузить nib из статического класса. Почему это неправильно? – TigerCoding
Кроме того, вы не можете использовать ARC с базовым SDK 4.3. – hwaxxer