2014-09-30 111 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