2014-09-30 105 views
0

我正通過音頻插孔接收數據。它大部分時間都在工作,但是您可以通過它接收不良數據。我希望能夠在錯誤崩潰之前捕獲錯誤。以下是代碼如何使用此代碼在崩潰之前捕獲錯誤

- (void) updateBytCtl:(NSString*) text { 
    // NSLog(text); 
    NSString *subString = [[text componentsSeparatedByString:@"="] objectAtIndex:0]; 
    NSString *expDateString = [[text componentsSeparatedByString:@"="]objectAtIndex:1]; 
    NSString *expDate = [expDateString substringToIndex:4]; 
    NSString *expDateYear = [expDateString substringToIndex:2]; 
    NSString *expDateMonth = [expDate substringFromIndex:2]; 

    subString = [[subString componentsSeparatedByString:@";"] objectAtIndex:1]; 

    } 

有多種原因可能導致讀者的數據不好。我希望它只是通過一般錯誤,並讓用戶重新刷卡。

+0

而且不要不必要地分割兩次'text'。將結果保存到數組變量。 – rmaddy 2014-09-30 19:56:54

+0

考慮使用「NSDateFormatter」或「NSDataDetector」,而不是手動解析。如果日期和月份與預期相反,你會做什麼? – zaph 2014-09-30 20:04:11

+0

扎克他們遇到了相同的插槽,由於他們的加密方式和讀者帶入它。 – Raymond 2014-09-30 20:07:15

回答

2

任何地方,你做出的對象在陣列中存在或字符串的長度假設,例如:

[[text componentsSeparatedByString:@"="] objectAtIndex:1] 

你會想要做這樣的事情

NSArray *components = [text componentsSeparatedByString:@"="]; 
if (components.count > 1) { 
    subString = [components objectAtIndex:1]; 
} else { 
    // Display error to user and return 
} 

你不我們不想假定一個數組有一個特定的索引,或者一個字符串是一定的長度,總是執行檢查,如果你的代碼會失敗,顯示你想要的任何錯誤並返回。

+0

謝謝,不知道爲什麼我沒有想到我猜測我一直在分析這個問題。謝謝 – Raymond 2014-09-30 19:56:06

+0

一般**不要忽略錯誤**。測試**所有**可能的錯誤和**處理**它們,一個錯誤的NSLog()'是不夠的。讓用戶知道錯誤併爲用戶提供恢復信息。 – zaph 2014-09-30 20:01:48

+0

Zaph在正常情況下您是正確的,但是當從音頻插孔接收到數據讀取時,您可能會收到大量不良數據,並且確實沒有任何押韻或原因。 – Raymond 2014-09-30 20:06:29