このinitメソッドが対象を範囲外に戻すのはなぜですか?nibをロードするときにこのinitメソッドがオブジェクトを範囲外に戻すのはなぜですか?
XCode 4.2、基本SDK 4.3、およびARCを使用して、UIViewをnib(UIViewControllerではなく)からロードしようとしています。私は、そのプロセスでUIViewControllerを使わないでください。
この回答をS.O.
@interface MyView : UIView
@property (unsafe_unretained, nonatomic) IBOutlet UILabel *textLabel;
@end
: はHow to load a UIView using a nib file created with Interface Builder
私は、単一のラベルでのUIViewのサブクラスを作成した(ユーザー「MusiGenesis」によって答えはプロセスを説明):ここでの質問は、それはそれを行うことができるようになります。実装では、私はinitWithFrameをオーバーライドします:
- (id)initWithFrame:(CGRect)frame
{
//self = [super initWithFrame:frame];
self = [JVUIKitUtils initWithNibName:@"MyView" withOwner:self];
if(self)
{
NSLog(@"Created");
}
return self;
}
IB 1つのビューで「MyView.xib」という名前のファイルを作成しました。それはサブビューとしてラベルを持っていて、ラベルプロパティを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;
}
次のスクリーンショットで見ることができるように、バンドルは1つのオブジェクト参照を持っているが、それはスコープの外にあります:
、別のファイルに は、私はこの再利用可能な静的メソッドを作成しました。
とデバッグ:
これは、インスタンス化のために私のコードです:
subView = [[MyView alloc] initWithFrame:CGRectZero]; // ok
NSAssert(subView != nil, @"MyView was nil"); // fail
なぜ他のS.O.上の任意のアイデアポスターは働くことができましたが、これはありませんか?
あなたは 'self = [JVUIKitUtils initWithNibName:@" MyView "withOwner:self]'で何をしようとしているのか分かりませんが、それは絶対に*間違いです*。 –
静的クラスからnibをロードしようとしています。なぜこれは間違っていますか? – TigerCoding
また、基本SDKが4.3のARCを使用することはできません。 – hwaxxer