【问题标题】:Adding custom defined objects to NSMutableArray overwrite the whole array将自定义对象添加到 NSMutableArray 会覆盖整个数组
【发布时间】:2011-12-07 03:29:15
【问题描述】:
-(id) initWithData:(NSString *)lastName: (NSString *)firstName{
self->firstname =  firstName;
self->lastname =  lastName;

return self;
}


-(void) printData {
NSLog(@"firstname: %@", firstname);
NSLog(@"lastname: %@", lastname);
}

所以每当我使用上面的 init 函数创建一个新对象时。并使用 addObject 函数将对象添加到 NSMutableArray。

NSMutableArray *objectArray = [[NSMutableArray alloc] init];

CustomObject *tempObject = [[CustomObject alloc] initWithData: @"smith": @"john"];
CustomObject *tempObjectb = [[CustomObject alloc] initWithData: @"brown": @"william"];
[objectArray addObject:tempObject];
[objectArray addObject:tempObjectb];

[[objectArray objectAtIndex:0] printData];
[[objectArray objectAtIndex:1] printData];

索引为 1 的对象,并且 0 始终等于最后添加到数组中的对象。
如果我使用 for 循环,或者有超过 2 个对象,打印时的所有值都会转到最后添加到 objectArray 的对象的值,也会发生这种情况。让我知道是否有任何我遗漏的信息。 有什么我想念的吗?

【问题讨论】:

  • 尝试将其添加到您的 initWithData: if ( self = [super init] { .. rest come here .. } return self; }。我假设您的自定义对象继承自 NSObject,因此您必须调用 [super init]。
  • 抱歉,变量名输入错误。
  • 啊,我试试,谢谢 iska。
  • 就是这样。感谢您的帮助!
  • 你也误用了->。除非您真的知道自己在做什么,否则您几乎不应该将 -> 用于 ObjC 对象。你的意思是 self.firstname=firstname。

标签: iphone objective-c ios nsmutablearray


【解决方案1】:

修复您的initWithData:lastName: 实现如下:

-(id) initWithData:(NSString *)lastName: (NSString *)firstName
{

self = [super init];
if ( nil != self ) {
  self->firstname =  [firstName retain];
  self->lastname =  [lastName retain];
}

return self;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2012-03-28
    • 2015-06-25
    • 2017-01-12
    • 1970-01-01
    • 2021-06-04
    相关资源
    最近更新 更多