Ios insertObject:AtIndex:0无法正常工作

Ios insertObject:AtIndex:0无法正常工作,ios,objective-c,nsmutablearray,nsarray,Ios,Objective C,Nsmutablearray,Nsarray,我有一个函数,其中函数insertObject:AtIndex:0的行为异常。将所有对象插入NSMutableArray CardViewController后,最后一个元素始终为nil。我在init方法的开头对CardViewController进行了alloc初始化 - (void)reloadCardViews; { // Add the restaurants onto view [self removeAllCards]; for (int i = 0

我有一个函数,其中函数
insertObject:AtIndex:0
的行为异常。将所有对象插入NSMutableArray CardViewController后,最后一个元素始终为
nil
。我在init方法的开头对CardViewController进行了alloc初始化

- (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;
    }
-(void)重新加载卡片视图;
{
//将餐厅添加到视图中
[自动移除所有卡];
对于(int i=0;i
什么是
[self-removeAllCards]
呢?我怀疑您调用了
[CardViewController removeAllObjects]
?您是否尝试过使用
[CardViewController添加对象:vc]
?如果这样做有效并且顺序很重要,请使用
i--
从后面遍历for循环


还要确保对象不是nil,数组是可变的,并且也是初始化的。对于未初始化的可变数组,我也遇到了类似的问题。

您不能向数组添加nil对象,这是一个运行时错误。所以我现在能想到的就是,保留计数一定有点奇怪。NSArray保留了其中的对象,因此该对象在某个地方被释放了太多次


这是一种可能性吗?

确保在将每个对象添加到数组之前都分配了它。这就是我在将对象添加到数组之前分配对象的方式:-(id)initWithAppearanceIndex:(int)index{self=[self init];_appearIndex=index;return self;}确保无论何时这样说,CardViewController都不是零“语言Y中的功能X无法正常工作”,您不可避免地会出错,并将自己设置为一个傻瓜。相反,请说“我不明白发生了什么事”。将您的数组记录到控制台,看看它是否已填充:NSLog(@“%@”);您尝试过“addObject”方法吗?2013-03-13 22:15:31.603 iOSShowcase[50772:c07](,,,,,,,,,,,”)好的。您已经用VCs填充了阵列。现在有什么奇怪的?它似乎在控制台上记录了5个非零对象,但在我检查元素时的左栏中,数组是这样的[0]=SHCCardVC*0x0e75d010,[1]=[1]SHCCardVC*0x0e75ca00,[2]=SHCCardVC*0x0e75c100,[3]=SHCCardVC*0x0758f060,[4]=id 0x00000000Nice。一个未初始化的数组是我的罪魁祸首。这个答案有助于快速解决我的问题。我的问题是我必须将非nil对象添加到数组中,但结果总是最后一个元素总是nil最后一个元素必须是nil最后一个元素是指在计数为n的数组中,索引为n的元素。否,元素的数量是5,但第四个元素(最后一个)是零