ivars in init setzen
Ich habe zwei View Controller:BSViewController
das enthält die Quelle ivarsnumber
undarray
, undBSotherViewController
welches als Ziel benötigt, um die ivars zu erhalten.In dieser Frage wurde eine Möglichkeit angegeben, das gewünschte Ergebnis zu erzielen. Der Vorschlag war, die Werte von zu berechnenself.number
undself.array
in einem (ninit
das überschreibt die bezeichneteinit
wie hier gezeigt.
- (id)init {
if (self = [super init]) {
//Set values
NSArray* _array = [NSArray arrayWithObjects: @"manny",@"moe",nil];
self.array = _array;
self.number = 25;
}
return self;
}
Aber ich weiß nicht, wie diese Lösung die Berechnung von ermöglichtself.number
oderself.array
innerhalb der ursprünglichen Methode (viewDidLoad
); Ich bin nur in der Lage, 0 und null für ihre beiden Werte in zu bekommenviewDidLoad
mit jedem Ansatz habe ich versucht.
Darüber hinaus gibt die folgende Zeile einen Warnhinweis ausview
ist eine nicht verwendete Variable.
BSViewController *view = [[BSViewController alloc] init];
Ich suche also nach einem Ansatz, der zuerst meine Ivars berechnetnumber
undarray
und führt dann das ausinit(WithNumber)
Damit können die gleichen Variablen in der Zielklasse verwendet werdenBSotherViewController
.
Ich dachte, ein direkterer Ansatz wäre nicht sinnvollinit
, sondern etwas wie das Folgende zu verwendeninitWithNumber
Aber ich kann scheinbar nicht dafür sorgen, dass dies mit allen ARC-Anforderungen für die Verwendung von Unterstrichen und meinem begrenzten Verständnis von Objective-C funktioniert.
- (id)initWithNumber:(NSInteger)number array:(NSArray *)array
{
self = [super init];
if (self) {
_number = number;
_array = array;
return self;
}
return nil;
}
Der Vollständigkeit halber werde ich nachfolgend den größten Teil des Codes wiedergeben, der in der Antwort auf die vorherige Frage erstellt wurde.
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