显示IOS错误的数组项

时间:2017-10-20 10:05:33

标签: ios objective-c arrays

我有一个数组,其中有一些项目可以在单击按钮时旋转图像视图,现在当我通过获取当前索引来显示错误的数组时,我很困惑为什么我得到这个。 我的代码是这样的:

- (IBAction)my:(id)sender {
NSString *cureentIndex=0;
NSArray *persons = [NSArray arrayWithObjects:@"M_PI",@" M_PI_4",@" M_PI_2",@"M_PI*2", nil];
NSArray *person = @[@"M_PI", @"M_PI_4", @"M_PI_2"];

_imageView.transform = CGAffineTransformMakeRotation(person[cureentIndex])

if currentIndex != persons.count-1 {
    currentIndex = currentIndex + 1
}else {
    // reset the current index back to zero
    currentIndex = 0
}
}

错误在这里: enter image description here

4 个答案:

答案 0 :(得分:1)

您已将cureentIndex声明为NSString *,因此当您说person[cureentIndex]时,编译器认为person必须是字典,因为您使用的是[]使用对象访问。这会导致错误,因为person实际上是一个数组,并且不能用字符串索引。

我认为您打算将cureentIndex声明为int,或者您想说currentIndex

答案 1 :(得分:0)

有一些错误:

索引必须是int

NSString *cureentIndex=0;  

成为

int currentIndex = 0;

并且数组必须是double而不是字符串,CGAffineTransformMakeRotation需要一个双重的CGFloat

NSArray *person = @[@"M_PI", @"M_PI_4", @"M_PI_2"];

变为

NSArray *person = @[[NSNumber numberWithDouble:M_PI], [NSNumber numberWithDouble:M_PI_4], [NSNumber numberWithDouble:M_PI_2]];

_imageView.transform = CGAffineTransformMakeRotation(person[cureentIndex])

变为

_imageView.transform = CGAffineTransformMakeRotation([person[cureentIndex] doubleValue]);

答案 2 :(得分:0)

有很多问题,请试试这个

NSInteger currentIndex = 0;
NSArray<NSNumber *> *persons = @[@(M_PI), @(M_PI_4), @(M_PI_2)];

- (IBAction)my:(id)sender {
    _imageView.transform = CGAffineTransformMakeRotation(persons[currentIndex].doubleValue)
    currentIndex = (currentIndex + 1) % persons.count;
}

答案 3 :(得分:0)

  • 我不知道为什么你将currentIndex的属性设置为NSString,实际上我们总是将XXXindex(current / last / next)设置为int或NSInteger属性。
  • 另外,这个人是一个数组,它的关键必须是一个int!,它是 价值可以是任何对象。
  • 我将您的代码修改为:

    NSInteger currentIndex = 0;

    NSArray * person = @ [@“M_PI”,@“M_PI_4”,@“M_PI_2”];

    CGFloat rotate = [person [currentIndex] floatValue];

    _imageView.transform = CGAffineTransformMakeRotation(rotate);

  • 你会发现它不能很好地运行,但是它会是0!因为,NSString的方法floatValuedoubleValue只能将字符串(如:@“123”@“0.5”)更改为数字,字符串(如:@“M_PI”)不能改为正确的号码。

  • 我再次修复了你的代码:

    NSInteger currentIndex = 0;

    CGFloat mPi = M_PI;

    NSArray * person = @ [@(mPi),@(mPi / 4.0),@(mPi / 2.0)];

    CGFloat rotate = [person [currentIndex] floatValue];

    _imageView.transform = CGAffineTransformMakeRotation(rotate);

  • 守则运作良好!这是因为M_PI是A ,如果你 写代码@“M_PI”,系统无法识别其值3.1415926。所以 你必须写M_PI而不是@“M_PI”。

事实上,这个问题的核心是你需要一个数字,所以你的数组必须包含一些数字!或者像数字一样的字符串! :)