For循环没有启动,因为Array没有对象

时间:2015-10-22 00:07:08

标签: ios objective-c

我的目标是在此类中创建一个收藏夹数组,并在用户单击收藏夹按钮时将它们添加到数组中。我的问题是for循环没有发生,意味着[arrayOfFavs count] = 0.我第一次理解这个,但是在我添加一个对象后,为什么计数不会增加而for循环发生? / p>

-(IBAction)favbutton
{
    bool *isThereAlready = true;
    NSLog(@"start for loop");
    for(int i = 0; i < [arrayOfFavs count]; i++)//problem here
    {
        if ([stateName isEqualToString: [[arrayOfFavs objectAtIndex:i] objectAtIndex:0]])
        {
            isThereAlready = false;
            NSLog(@"sent to else");
        }
        NSLog(@"objects in arrayofStateFavs");
    }

    if(isThereAlready)
    {
        [checkedButton setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal];

        NSArray *favArray = [NSArray arrayWithObjects:stateName,phoneName,faxName,addressName, nil];

        [[NSNotificationCenter defaultCenter]
     postNotificationName:@"favState"
     object:favArray];

        [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTableViewNotification"
                                                        object:self];

        [arrayOfFavs addObject:favArray];
    }
    else //unfavorite
    {
        [checkedButton setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];

        NSArray *favDetails = [NSArray arrayWithObjects:stateName,phoneName,faxName,addressName, nil];
        [[NSNotificationCenter defaultCenter]
     postNotificationName:@"unfavState"
     object:favDetails];

        [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTableViewNotification"
                                                        object:self];

        for(int i = 0; i < [arrayOfFavs count]; i++)
        {
            if ([stateName isEqualToString: [[arrayOfFavs objectAtIndex:i] objectAtIndex:0]])
            {
                [arrayOfFavs removeObject:[arrayOfFavs objectAtIndex:i]];
                i--;
            }
        }
   }
}

编辑:这与标记为重复的问题不同:数组已初始化且for循环仅循环一次或根本不循环。

编辑2: 这是我初始化数组的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Set the Label text with the selected state

    stateLabel.text = stateName;
    phoneLabel.text = phoneName;
    faxLabel.text = faxName;
    addressLabel.text = addressName;

    plistNum = [NSString stringWithFormat:@"tel:%@",phoneName];

    arrayOfFavs = [[NSMutableArray alloc] init];//for this class

}

2 个答案:

答案 0 :(得分:0)

在您分享初始化阵列的代码之前,我们无法真正假设您是。请仔细检查您是否真正创建了NSArray。请记住,在obj-c中,您可以向nil对象发送消息。

你需要这样的东西:

arrayOfFavs = @[];

答案 1 :(得分:0)

这可能是你的问题:

bool *isThereAlready = true;

编译器警告这是不正确的代码。您正在使用int初始化指针。尝试删除*并查看是否有效。

- 更多 -

您是否意识到以下代码不会向arrayOfFavs添加四个项目?

    NSArray *favArray = [NSArray arrayWithObjects:stateName,phoneName,faxName,addressName, nil];
    [arrayOfFavs addObject:favArray];

相反,它只添加一个项目,而一个项目是一个包含四个项目的数组。如果这是故意的,我强烈建议你创建一个包含四个NSStrings的课程,而不是你如何拥有它。