-1

insertObject:AtIndex:0関数が奇妙な動作をするこの関数があります。すべてのオブジェクトを NSMutableArray cardViewControllers に挿入した後、最後の要素は常にnilinit メソッドの最初に cardViewControllers を割り当てました。

- (void)reloadCardViews;
{
    // Add the restaurants onto view
    [self removeAllCards];

        for (int i = 0; i < NO_OF_CARDS; i++) {
            SHCCardVC *vc = [[SHCCardVC alloc] initWithAppearanceIndex:i];
            vc.delegate = self;
            [cardViewControllers insertObject:vc atIndex:0];//it's behaving weird here
            [self addChildViewController:vc];
            // set card position to center of the container
            vc.view.center = CGPointMake(_cardContainer.frame.size.width / 2, _cardContainer.frame.size.height / 2);
            [_cardContainer addSubview:vc.view];
        }
        _currentCardViewIndex = 0;
        _currentCardIndex = 0;
    }
4

2 に答える 2

1

何をし[self removeAllCards]ますか?私はあなたが電話していると思います[cardViewControllers removeAllObjects]か?使ってみました[cardViewControllers addObject:vc]か?これが機能し、順序が重要な場合は、 for ループを の後ろからi--.

また、オブジェクトが nil ではなく、配列が変更可能で初期化されていることも確認してください。初期化されていない可変配列でも同様の問題がありました。

于 2013-03-13T14:04:18.100 に答える
0

nil オブジェクトを配列に追加することはできません。これは実行時エラーです。つまり、保持カウントで何かがおかしくなっているに違いありません。現時点で私が考えることができるのはそれだけです。NSArray はその中にあるオブジェクトを保持するため、オブジェクトがどこかで何度も解放されています。

これは可能性がありますか?

于 2013-03-13T14:08:26.580 に答える