BSViewController
ソース ivarsnumber
とarray
を含むビュー コントローラとBSotherViewController
、ターゲットとして ivars を受け取る必要があるビュー コントローラがあります。この質問では、目的の結果を生成する1つの方法が提供されました。提案は、ここに示すように指定されたをオーバーライドするself.number
との値を計算することでした。self.array
init
init
- (id)init {
if (self = [super init]) {
//Set values
NSArray* _array = [NSArray arrayWithObjects: @"manny",@"moe",nil];
self.array = _array;
self.number = 25;
}
return self;
}
self.number
しかし、この解決策がどのようにして元のメソッドの、または元のメソッド内での計算を可能にするのかわかりませんself.array
( viewDidLoad
)。viewDidLoad
私が試したアプローチでは、2 つの値に対して 0 と null しか取得できません。
さらに、次の行view
は、未使用の変数であるという警告の問題を生成します。
BSViewController *view = [[BSViewController alloc] init];
そのため、最初にivarnumber
を計算してarray
から実行するアプローチを探しているinit(WithNumber)
ので、同じ変数をターゲットクラスで使用できますBSotherViewController
。
より直接的なアプローチは useinit
ではなく、次のようなものを使用することだと思いましinitWithNumber
たが、アンダースコアを使用するためのすべての ARC 要件と、objective-c の私の限られた理解でそれを機能させることはできないようです。
- (id)initWithNumber:(NSInteger)number array:(NSArray *)array
{
self = [super init];
if (self) {
_number = number;
_array = array;
return self;
}
return nil;
}
完全を期すために、前の質問の回答で生成されたコードのほとんどを以下に再現します。
BSViewController.h
#import <UIKit/UIKit.h>
@interface BSViewController : UIViewController{
// NSInteger number;
}
@property (nonatomic) NSInteger number;
@property (nonatomic, weak) NSArray * array;
// - (id)initWithNumber:(NSInteger)number array:(NSArray *)array;
@end
BSViewController.m
#import "BSViewController.h"
@interface BSViewController ()
@end
@implementation BSViewController
@synthesize number;
@synthesize array;
/*
- (id)initWithNumber:(NSInteger)number array:(NSArray *)array
{
self = [super init];
if (self) {
_number = number;
_array = array;
return self;
}
return nil;
}
*/
- (id)init {
if (self = [super init]) {
NSArray* _array = [NSArray arrayWithObjects: @"manny",@"moe",nil];
self.array = _array;
self.number = 25;
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"self: %@", self);
BSViewController *view = [[BSViewController alloc] init]; //Warning issued: unused variable
NSLog(@"self number: %d", self.number);
NSLog(@"self array: %@", self.array);
}
@end
BSotherViewController.h
#import <UIKit/UIKit.h>
@class BSViewController;
@interface BSotherViewController : UIViewController
@property (strong, nonatomic) BSViewController *aview;
@end
BSotherViewController.m
#import "BSotherViewController.h"
#include "BSViewController.h"
@interface BSotherViewController ()
@end
@implementation BSotherViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
BSViewController *aview = [[BSViewController alloc] init];
NSLog(@"other view: %@", self.aview);
NSLog(@"other number: %d", aview.number);
NSLog(@"other array: %@", aview.array);
}
@end