我有兩個視圖控制器:BSViewController
其中包含源ivars number
和array
和BSotherViewController
,它們作爲目標需要接收ivars。 One way of producing the desired result was provided in this question.建議計算init
中的self.number
和self.array
的值,該值覆蓋指定的init
,如下所示。將ivars放入init
- (id)init {
if (self = [super init]) {
//Set values
NSArray* _array = [NSArray arrayWithObjects: @"manny",@"moe",nil];
self.array = _array;
self.number = 25;
}
return self;
}
但我不知道這個解決方案如何使原來的方法(viewDidLoad
)內的self.number
或self.array
計算;我只能通過我嘗試過的任何方法在viewDidLoad
中獲得0和null兩個值。
此外,以下行會產生警告問題,view
是未使用的變量。
BSViewController *view = [[BSViewController alloc] init];
所以我要尋找它首先計算實例變量我和number
的array
方式,然後執行init(WithNumber)
使相同的變量可以在目標類BSotherViewController
使用。
我想到了一個更直接的方式將不會使用init
,而是使用類似下面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
「BSViewController」的指定初始值設定項是'initWithNibName:bundle:',所以你覆蓋它而不是'init'。 – mipadi 2013-03-12 21:47:25
在你的另一個問題中,你說「'BSViewController'上有一個按鈕,它是連接到'BSotherViewController'」。你的意思是說你正在使用一個故事板並且已經從按鈕創建了一個segue到一個'BSotherViewController'? – 2013-03-12 21:48:03
是的,我正在使用故事板。 Wrt mipadi的評論:這會讓我更接近我想要的答案嗎?我認爲我真的應該使用「模型」類而不是「控制器」類,但在這一點上,我只是試圖讓某種測試工作。我的兩個變量'number'和'array'在VC中計算並用於另一個VC中。我只是想弄清楚從前者到後者的物流。我不知道我會有這麼多麻煩。 – zerowords 2013-03-12 21:57:09