2013-04-04 187 views
1

我知道這個問題已被問了好幾次,但我尋找一個更一般的答案。 我已經開發了iOS 6的應用程序,我在模擬器(Retina 3.5和4英寸)以及iPhone 4設備上進行了測試。 它從來沒有崩潰,但是當我提交的應用程序,以蘋果和他們回答:蘋果拒絕我的應用程序崩潰在iphone 5

我們發現您的應用一經推出在iPhone 5運行iOS 6.1.3墜毀,

綜觀崩潰日誌enter image description here

我們看到,它在管線164從索引出界,這是有道理的,因爲我有這樣的代碼有崩潰:enter image description here

我補充說「如果「停止執行,只要indexTimesArray大於數組的長度並查看發生的原因,但我無法重現該錯誤。我從來沒有像他們那樣得到index out of bounds ... 確實,我沒有在iPhone 5設備上測試它,但我的電腦上有XCode 4.6和iOS 6.1,而且還有iOS 6.1.3的iPhone 4,但蘋果公司的這些人正在讓應用程序崩潰,所以如何重現錯誤呢? 我試圖安裝從TestFlight的應用程序,因爲它安裝它作爲一個全新的應用程序,就像他們在測試時一樣,但仍然沒有錯誤...

如何重現錯誤?這可能是與構建設置有關的問題嗎?

由於

[編輯] 我初始化timesArray的內容中的對象的init方法中,這樣的:

- (id)init{  
self = [super init];  
df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"yyyy-MM-dd HH:mm"]; 
rangeDates = [[NSArray alloc]initWithObjects:@"2013-04-11 10:00", @"2013-04-12 10:00", @"2013-04-13 10:00", @"2013-04-14 10:00", nil];  
timesArray = [[NSArray alloc]initWithArray:[NSArray arrayWithObjects:@"10:00", @"11:00", @"12:00", @"13:00", @"14:00", @"15:00", @"16:00", @"17:00", @"18:00", @"19:00", @"20:00", @"21:00", @"22:00", nil]];  
colorDictio = [[NSDictionary alloc]initWithObjects:[NSArray arrayWithObjects:[UIColor colorWithRed:0.74 green:0.66 blue:0.37 alpha:1.0], [UIColor colorWithRed:0.64 green:0.15 blue:0.11 alpha:1.0], [UIColor colorWithRed:0.313 green:0.65 blue:0.69 alpha:1.0], [UIColor colorWithRed:0.79 green:0.4 blue:0.59 alpha:1.0], [UIColor colorWithRed:0.45 green:0.55 blue:0.53 alpha:1.0], [UIColor colorWithRed:0.14 green:0.27 blue:0.66 alpha:1.0], nil] forKeys:[NSArray arrayWithObjects:@"showers area", @"zinctalks", @"zincnetwork", @"zincshows", @"zinclabs", @"zinczone", nil] ]; 
return self; 
} 
+0

我面臨與Objective-C中的數組相似的錯誤...我的建議是使用NSMutableArrays或NSArrays。 – mayuur 2013-04-04 08:41:34

+0

你的意思是聲明數組作爲一個屬性? – subharb 2013-04-04 09:06:56

+0

用屬性'@property(nonatomic,retain)NSMutableArray * timesArray;' – mayuur 2013-04-04 09:13:30

回答

0

由於@mayur,他的評論是正確的答案,「我曾經遇到過類似的錯誤早些時候在Objective-C的數組...我的建議是使用具有NSMutableArrays或NSArrays自我」

0

這一切首先是不相關的一個OS錯誤。您的應用程序正在崩潰,因爲正在訪問錯誤的數組索引。

  1. 如何重現錯誤? :嘗試使用您必須提供給蘋果的相同憑證。
  2. 這可能是一個問題,建設設置? :

調試錯誤你可以做的就是嘗試在if之前打印indexTimesArray的值。此外,嘗試打印所有傳遞給數組元素的值。這將幫助您跟蹤正在發送的錯誤索引。

+0

你憑什麼認證?另外請記住,使用我擁有的工具我從來沒有得到索引越界,我需要的是重現蘋果的環境或爲什麼它與他們而不是與我墜毀。 – subharb 2013-04-04 09:02:44

1

要弄清楚如何重現該錯誤,您必須查看創建timesArray的代碼。

發生越界錯誤是因爲[timesArray count]小於2(或整個數組爲零)。所以你必須弄清楚哪個條件導致一個數組有一個或零個對象。也許這是因爲沒有互聯網連接。

包裝objectAtIndex總是一個好主意:檢查數組的實際大小。

我會用else if ([timesArray count] >= 2) {替換else {,並添加一個處理< 2個數組的另外一個數組。

+0

爲什麼你說錯誤來自長度小於2?我認爲這是一個越界,無論如何,我從來沒有得到這個錯誤,我需要的是能夠重現蘋果說這個應用程序崩潰的環境 – subharb 2013-04-04 09:03:40

+0

因爲這是片段可以拋出超出界限錯誤的唯一方式。 (除了多線程競態條件之外)if條件的「then」部分僅在邊界允許時執行。這個例外不會發生在那裏。當「count - 2」爲0或更大時,「else」部分不會發生異常。所以唯一可能導致異常的是少於2個對象的數組。 – 2013-04-04 09:58:28

+0

另一個問題是如果你真的得到一個越界異常。也許你的代碼試圖訪問無效的內存,因爲你犯了內存管理錯誤 – 2013-04-04 10:03:37