我正在尝试创建一个图像类数组时出错

时间:2015-04-02 16:18:02

标签: objective-c

  

由于未捕获的异常'NSRangeException'而终止应用程序,原因:'*** - [__ NSArrayI objectAtIndex:]:索引205003599超出范围[0 .. 5]'

我在.h文件中编写此代码

#import <Foundation/Foundation.h>
@interface image : NSObject
@property(strong,nonatomic) NSArray *myimage;
-(image *) randomimage;
@end

我在.M文件

上实现它
#import "image.h"
#import <UIKit/UIKit.h>
@implementation image
- (instancetype)init
{    
    self = [super init];
    if (self) {
         _myimage =[[NSArray alloc]initWithObjects:
              [UIImage imageNamed:@"Earth.jpg"],
              [UIImage imageNamed:@"Jupiter.jpg"],
              [UIImage imageNamed:@"Orion.jpg"],
              [UIImage imageNamed:@"Saturn.jpg"],
              [UIImage imageNamed:@"Venus.jpg"],
              [UIImage imageNamed:@"Mars.jpg"],
              nil];
    }
    return self;
}
-(image *) randomimage{
    int randimage=arc4random_uniform((int)self.myimage);
    return [self.myimage objectAtIndexedSubscript:randimage];
}
@end

1 个答案:

答案 0 :(得分:1)

你期待什么?看看你的代码:

int randimage=arc4random_uniform((int)self.myimage);
return [self.myimage objectAtIndexedSubscript:randimage];

arc4random_uniform可以返回0和其参数之间的任何内容。参数是self.myimage - 对象。它的值不是整数,但是你强迫它是一个整数。你得到的是这个对象的内存位置,可以是任何数字。所以你最终得到一个巨大的数字,超出了数组中实际的元素数量。你的意思可能是self.myimage.count,不是吗?