0

私は自分のクラス(NSObjectのサブクラス)を作成し、そのためのカスタム初期化子も作成しました。私が遭遇している問題は、アプリケーションを起動して、refreshDataインスタンスメソッドを呼び出すと、すべてが正常に機能することです。次にrefreshDataメソッドをもう一度呼び出すと、オブジェクトの割り当てが解除され、エラーが発生します。インスタンスが初期化されると、メモリは割り当てられますが、どういうわけか割り当てが解除されます。私は何が欠けていますか?

UIViewController:

- (void)viewDidLoad {

    [super viewDidLoad];

    // Initialze an instance of our data controller class
    dataController = [FCDataController initWithObject:self animated:NO];
    [dataController refreshData];
}

NSObject:

+ (FCDataController *)initWithObject:(id)object animated:(BOOL)animated {

    FCDataController *dataController = [[FCDataController alloc] initWithObject:object animated:animated];

    return dataController;
}

- (id)initWithObject:(id)object animated:(BOOL)animated {

    self = [super init];

    if (self) {

        self.delegate = object;
        self.animated = animated;
    }
    return self;
}
4

1 に答える 1

0

viewDidLoadのサブクラスでのみ呼び出されUIViewControllerます。このクラスは本当に a のサブクラスUIViewControllerですか?

これがView Controllerであると仮定すると、クラスのインスタンスはすでに作成されており、viewDidLoad呼び出されたときに実行されます。内部の行viewDidLoadは、同じクラスの 2 番目のインスタンスを作成し、最初のインスタンスを 2 番目のインスタンスのデリゲートに割り当てます。これはおそらくあなたが望むものではありません。

ビューがロードされたときにデータを更新したいだけかもしれません。

- (void)viewDidLoad {
    [super viewDidLoad];

    // Initialze an instance of our data controller class
    [self refreshData];
}

もう少し拡張するにはinit、ビューがロードされたときにデータを再度更新するだけなので、データを更新する必要はおそらくありません。

于 2013-02-19T19:23:04.290 に答える