[ios]将 NSArray 复制到成员变量

标签: ios Objective-C
发布时间: 2017/3/21 22:42:57
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我在我的课有二传手︰

-(void)setNumbers:(NSArray *)aNumbers{
  NSArray *tArray = [[NSArray alloc]initWithArray:aNumbers]; //throws BAD ACCESS
  self.numbers = tArray;
  //also tried self.numbers = [tArray copy];
  [tArray release];

}

如果我调用 setter 像这样︰

NSArray *numbers = [TicketManager getRandomNumbersFor:@"LottoNormal"];
[self.ticket setNumbers:numbers];

在 ' getRandomNumbersFor:' (获取执行循环) 的方法︰

+(NSArray *)getRandomNumbersFor:(NSString *)aTicketType{

  NSLog(@"getting RandomNumbers for: %@",aTicketType);
  NSMutableArray *tResult;
  if([aTicketType isEqualToString:@"LottoNormal"]){
    tResult = [NSMutableArray arrayWithCapacity:6];
    for(int i = 0;i<6;i++){
        int tNumber = arc4random() % 48;
        tNumber++;
        NSLog(@"Number: %i",tNumber);
        [tResult addObject:[NSNumber numberWithInt:tNumber]];
    }
  }

  return tResult;
}

ViewController I´m 中标记线坏的获得。
任何人都可以帮助可以吗?

解决方法 1:

顺便说一句,你为什么写 setNumbers setter 方法?既然你定义一个属性, numbers ,调用 setter 方法 setNumbers 将为你合成。更糟的你 setNumbers 自称 !构造

self.numbers = tArray;

等效于调用

[self setNumbers:tArray];

这导致无限递归。

顺便说一句,我劝你们不要写你自己 setNumbers setter 方法除非有令人信服的理由这样做。默认传手各种各样的好东西 (适当的志愿,内存管理等),所以你应该考虑很久,并且替换你自己。如果你可以只是让编译器为你,综合您访问器方法 (setter 和 getter 方法)。

如果您必须编写您自己的访问器方法由于某种原因,至少,请确保引用实例变量,不访问器方法。

官方微信
官方QQ群
31647020