gpt4 book ai didi

ios - 复制 NSArray 到成员变量

转载 作者:行者123 更新时间:2023-11-28 20:20:32 26 4
gpt4 key购买 nike

我类有一只二传手:

-(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 中,我在标记的行中访问错误。
谁能帮忙?

最佳答案

顺便问一下,你为什么要写setNumbers setter 方法?鉴于您定义了一个属性 numbers,将为您合成一个名为 setNumbers 的 setter 方法。更糟糕的是,您的 setNumbers 会自行调用!结构

self.numbers = tArray;

相当于调用

[self setNumbers:tArray];

这导致无限递归。

顺便说一句,我建议不要编写自己的 setNumbers setter 方法,除非有令人信服的理由这样做。默认的 setter 做了各种很棒的事情(适当的内存管理、KVO 等),所以你应该仔细考虑用你自己的来替换它。如果可以的话,让编译器为您合成访问器方法(setter 和 getter)。

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

关于ios - 复制 NSArray 到成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16215718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com