从NSMutableArray

时间:2016-12-06 01:16:56

标签: ios objective-c arrays nsmutablearray

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

这是我目前的解决方案:

- (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]];

 }

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

2 个答案:

答案 0 :(得分:1)

// what goes here?应该只是self.myLabel.text

虽然添加一个保存最后一个随机索引的实例变量可能会更好。然后应该使用该实例变量进行所有数组索引引用。

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

答案 1 :(得分:0)

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

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

NSString *generatedString;

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

    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: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];
}