У меня есть два контроллера вида: BSViewController
, который содержит исходные ivars number
и array
и BSotherViewController
, которые, как цель, должны получить ивары. One way of producing the desired result was provided in this question. Было предложено вычислить значения self.number
и self.array
в init
, который переопределяет обозначенный 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;
}
Но я не знаю, как это решение позволяет вычислять self.number
или self.array
в оригинальном методе (viewDidLoad
); Я могу только получить 0 и null для их двух значений в viewDidLoad
с любым подходом, который я пробовал.
Кроме того, следующая строка вызывает предупреждение о том, что 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
В другом вопросе вы сказали, что «BSViewController» имеет кнопку на нем, которая переходит к «BSotherViewController». Вы имели в виду, что вы используете раскадровку и создали отступ от кнопки «BSotherViewController»? –
Да, я использую раскадровку. Комментарий Wrt mipadi: Это поможет мне ближе к ответу, который я хочу. Я думаю, что я действительно должен использовать класс «model» вместо класса «controller», но на данный момент я просто пытаюсь получить какой-то тест для работы. Мои две переменные 'number' и' array' вычисляются в этом VC и используются в одном другом VC. Я просто пытаюсь выработать логистику получения от первого до последнего. Я понятия не имел, что у меня будет такая большая проблема. – zerowords