2015-04-02 89 views
-2

由於未捕獲的異常'NSRangeException'而終止應用程序,原因:'*** - [__ NSArrayI objectAtIndex:]:index 205003599 beyond bounds [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 
+0

你會得到一個超過圖像數組邊界的索引的隨機整數。限制隨機數生成器僅生成0-5之間的數字,因爲數組中只有6個圖像。 – Zack 2015-04-02 17:26:12

回答

1

你期望什麼?看看你的代碼:

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

arc4random_uniform可以在0和它的參數之間的任何回報。參數是self.myimage - 一個對象。它的值不是一個整數,但是你迫使它成爲一個整數。因此你得到的是這個對象的內存位置,它可以是任何數字。所以你最終得到了一個巨大的數字,超出了數組中元素的實際數量。你的意思可能是self.myimage.count,不是嗎?

+0

當你的意思只是'objectAtIndex:'時,也不要調用'objectAtIndexedSubscript:'。這太愚蠢了。 – matt 2015-04-02 17:29:16

+0

謝謝你們..它的作品self.myimage.count – 2015-04-02 18:08:54

相關問題