Objective c 如何阻止addObject覆盖NSMutableArray中以前的所有对象

Objective c 如何阻止addObject覆盖NSMutableArray中以前的所有对象,objective-c,xcode,Objective C,Xcode,addObject正在覆盖以前的所有单元格。因此,如果数组大小为4,则添加对象会增加大小,但也会用相同的内容覆盖所有其他单元格 groups = [[NSMutableArray alloc]init]; [groups addObject:[[Group alloc] init]]; [[groups objectAtIndex:0] setGroupName:@"cs480"]; [[groups objectAtIndex:0] setPassword:@"apple1"]; [grou

addObject正在覆盖以前的所有单元格。因此,如果数组大小为4,则添加对象会增加大小,但也会用相同的内容覆盖所有其他单元格

groups = [[NSMutableArray alloc]init];
[groups addObject:[[Group alloc] init]];
[[groups objectAtIndex:0] setGroupName:@"cs480"];
[[groups objectAtIndex:0] setPassword:@"apple1"];

[groups addObject:[[Group alloc] init]];
[[groups objectAtIndex:1] setGroupName:@"cs481"];
[[groups objectAtIndex:1] setPassword:@"apple2"];

+(void) print{
    NSLog(@"size: %lu",(unsigned long)[groups count]);

    for(int i = 0; i < [groups count]; i++){
        Group *group = [groups objectAtIndex:i];
        NSLog(@"%@\t%@\n",[group getGroupName], [group getPassword]);

    }

}
问题是什么?

这些:

@implementation Group
NSString* groupName;
NSString* password;
NSMutableArray *groupMembers;
NSMutableArray *skillsOfMembers;
不是实例变量。它们只是全局变量。它们在文件范围内声明。它们介于
@实现
和相应的
@end
之间,这一事实对编译器来说毫无意义

实际上,整个程序只有一组变量,而不是
类的每个实例都有一组变量

你可能是说:

@implementation Group
{
    NSString* groupName;
    NSString* password;
    NSMutableArray *groupMembers;
    NSMutableArray *skillsOfMembers;
}

花括号是使变量成为实例变量所必需的。

错误在您的组类中。请发布相关代码。至少有一个错误是,您两次都在索引0处对对象进行操作
-addObject:
添加到数组的末尾。您添加的第二个
从未调用过
-setGroupName:
-setPassword:
(给定显示的代码)。嘿,感谢您的回复。我加入了小组课。我把索引改为1,但我还是有同样的问题。嘿,我真的想出来了,但就是这个。我在学习的过程中,哈哈。我真的很感谢你的帮助。
@implementation Group
NSString* groupName;
NSString* password;
NSMutableArray *groupMembers;
NSMutableArray *skillsOfMembers;
@implementation Group
{
    NSString* groupName;
    NSString* password;
    NSMutableArray *groupMembers;
    NSMutableArray *skillsOfMembers;
}