0

配列に問題があります。私の CarViewController には、クラス Car のいくつかのオブジェクトを含む配列があります。

...Car.h

@interface Car : NSObject
@property (nonatomic, strong) NSString *name;

..そしてCar.m

- (void)encodeWithCoder:(NSCoder *)coder;
{
    [coder encodeObject:name forKey:@"name"];
}
- (id)initWithCoder:(NSCoder *)coder;
{
    self = [[Car alloc] init];
    if (self != nil)
    {
        name = [coder decodeObjectForKey:@"name"];
   }
    return self;
}

とCarViewController

    Car *car1 = [Car new];
        car1.name = @"A1";
...
     cars = [NSArray arrayWithObjects: car1, car2, ..., nil];

しかし、NewViewController でこの配列にアクセスしようとすると、問題が発生します。

- (IBAction)btn:(id)sender {

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
CarViewController *vc = (CarViewController *)[storyboard instantiateViewControllerWithIdentifier:@"CarVC"];

Car *car = [vc.cars objectAtIndex:0];
NSLog(@"%@", car.name);
}

しかし、ログにはcar.name = (null)と書かれているだけです。よろしくお願いいたします。

更新

- (IBAction)btn:(id)sender {

 UINavigationController *nav = self.tabBarController.viewControllers[1];
        CarViewController *vc = nav.topViewController;
        Car *car = [vc.cars objectAtIndex:0];
        NSLog(@"%@", car.name);
}

私は何か試してみましたが ( rdelmarの努力に感謝します)、結果は同じです。

4

1 に答える 1

0

このコードを入れると

Car *car1 = [Car new];
        car1.name = @"A1";
...
     cars = [NSArray arrayWithObjects: car1, car2, ..., nil];

ビューコントローラーのviewDidLoadメソッドでは、ビューがまだロードされていないため、結果は正常です。(viewDidLoadメソッドはまだ呼び出されていません)

私は絵コンテに慣れていませんが、電話すると思います

CarViewController *vc = (CarViewController *)[storyboard instantiateViewControllerWithIdentifier:@"CarVC"];

新しい ViewController をインスタンス化します。したがって、carsプロパティにアクセスしようとすると、この新しいviewControllerが画面に表示されない場合はnilになります

アップルのドキュメント

このメソッドを使用して、アプリケーションでプログラムによって操作および表示する View Controller オブジェクトを作成します。このメソッドを使用してビュー コントローラーを取得する前に、Interface Builder で適切な識別子文字列を明示的にタグ付けする必要があります。

このメソッドは、呼び出すたびに、指定されたビュー コントローラーの新しいインスタンスを作成します。

于 2013-07-31T15:43:14.447 に答える