Iphone 从NSString中提取子字符串的线程
我正在使用RedPark的iOS串行电缆做一些工作。这是一种允许iOS设备和其他设备(如微控制器)之间进行串行通信的电缆 RedPark SDK附带了一种方法,可以读取串行线路上可用的字节。只要电缆接收到信息,就会调用此方法Iphone 从NSString中提取子字符串的线程,iphone,objective-c,ios6,nsstring,nsthread,Iphone,Objective C,Ios6,Nsstring,Nsthread,我正在使用RedPark的iOS串行电缆做一些工作。这是一种允许iOS设备和其他设备(如微控制器)之间进行串行通信的电缆 RedPark SDK附带了一种方法,可以读取串行线路上可用的字节。只要电缆接收到信息,就会调用此方法 (void)readDataBytes(UInt32 bytes) { NSString *s = [[NSString alloc] initWith...bytes]; NSString *editedString = [self extractSubStr
(void)readDataBytes(UInt32 bytes) {
NSString *s = [[NSString alloc] initWith...bytes];
NSString *editedString = [self extractSubStringMethod:s];
[myArray addObject:editedString];
}
微控制器以以下格式发送信息
<msg>xxxxxxxxxxxxx</msg>
上面的代码只是来自记忆,因为我把我的Mac电脑留在家里,我正在工作。
如果您有任何建议/帮助,我们将不胜感激
while([myArray count] > 0) //Don't believe this is neccesary but its in anyway
{
for(int i = 0; i < [myArray count]; i++){
NSString *string = [myArray objectAt(i)];
[self displayString:string];
[myArray removeObjectAt(i);
}
}
为了解决您的第一个问题,
[string substringWithRange:NSMakeRange(5,string.length-6)]
应该足够了,并且可以正常工作。您可以使用NSRegularExpression
来匹配标记中的内容,但对于这样一个简单的任务来说,这太过分了(而且会影响性能)
其次,UIKit方法只能从主线程调用(请参阅):
注意:在大多数情况下,UIKit类只能从应用程序的主线程使用。对于从UIResponder
派生的类,或者涉及以任何方式操纵应用程序用户界面的类,情况尤其如此
您似乎正在另一个线程中设置标签的文本。这就是导致坠机的原因。您需要调用displayString:
方法,如下所示:
while ([myArray count] > 0)
{
[self displayString: myArray[0]];
[myArray removeObjectAtIndex: 0];
}
[self performSelectorOnMainThread:@selector(displayString:) withObject:string waitUntilDone:YES];
这将在主线程而不是后台线程上执行该方法
while ([myArray count] > 0)
{
[self displayString: myArray[0]];
[myArray removeObjectAtIndex: 0];
}
[self performSelectorOnMainThread:@selector(displayString:) withObject:string waitUntilDone:YES];