从NSMutableArray中删除随机项目

问题描述:

我有一个程序,用户通过文本字段将字符串输入到NSMutableArray(myArray)中。这个数组被传递到下一个视图控制器,其中有一个标签(myLabel)和两个按钮。打印到标签是myArray的随机字符串。 ButtonA在按下时显示一个与数组不同的随机字符串,而ButtonB删除打印到标签上的当前字符串,然后在数组中显示一个随机字符串到标签。从NSMutableArray中删除随机项目

这是我目前的解决方案:

- (void)viewDidLoad { 

self.myLabel.text = [self.myArray objectAtIndex:arc4random() % [myArray count]]; 


-(IBAction)ButtonA:(id)sender { 

self.myLabel.text = [self.myArray objectAtIndex:arc4random() % [myArray count]]; 

} 

-(IBAction)ButtonB:(id)sender { 

NSInteger index = [myArray indexOfObject: //what goes here?]; 
[self.myArray removeObjectAtIndex:index]; 
self.myLabel.text = [self.myArray objectAtIndex:arc4random() % [myArray count]]; 

} 

有没有办法让显示的随机字符串的索引,然后从数组中删除吗?我希望这个继续这样做,直到数组中的所有项目都被删除。谢谢

// what goes here?应该简单地是self.myLabel.text

虽然最好添加一个实例变量来保存最后一个随机索引。然后,所有数组索引引用都应该使用该实例变量。

您也有相同的代码行来计算一个随机数并设置一个标签重复3次。为此创建一个新方法,并从现在的三个地方调用该函数。

有两种方法可以做到这一点:

第一种方式是存储您从随机方法得到的字符串。你可以在你的类中声明一个全局变量。我建议你总是在另一种方法中放置一段类似的代码。

- (void)viewDidLoad 
{ 
    self.myLabel.text = [self generateRandomString]; 
} 

- (IBAction)buttonA:(id)sender 
{ 
    self.myLabel.text = [self generateRandomString]; 
} 

- (IBAction)buttonA:(id)sender 
{ 
    [self.myArray removeObject:generatedString]; 

    self.myLabel.text = [self generateRandomString]; 
} 

另一种方式是存储的字符串生成的索引:然后

NSInteger generatedStringIndex; 

- (NSString *)generateRandomString 
{ 
    generatedStringIndex = arc4random() % [myArray count]; 
    NSString generatedString = [self.myArray objectAtIndex:generatedStringIndex]; 

    return generatedString; 
} 

在您的实现:

- (void)viewDidLoad 
{ 
    self.myLabel.text = [self generateRandomString]; 
} 

- (IBAction)buttonA:(id)sender 
{ 
    self.myLabel.text = [self generateRandomString]; 
} 

- (IBAction)buttonA:(id)sender 
{ 
    [self.myArray removeObject:generatedStringIndex]; 

    self.myLabel.text = [self generateRandomString]; 
} 

NSString *generatedString; 

- (NSString *)generateRandomString 
{ 
    generatedString = [self.myArray objectAtIndex:arc4random() % [myArray count]]; 

    return generatedString; 
} 
在您的实现

然后