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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage