Iphone 从NSString中提取子字符串的线程

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

我正在使用RedPark的iOS串行电缆做一些工作。这是一种允许iOS设备和其他设备(如微控制器)之间进行串行通信的电缆

RedPark SDK附带了一种方法,可以读取串行线路上可用的字节。只要电缆接收到信息,就会调用此方法

(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];
这将在主线程而不是后台线程上执行该方法

  • 您不能在辅助线程上更新UI
  • 可变类不是线程安全的

    而([myArray count]){ NSString*string=[myArray objectAt(0)]; [self-performSelectorOnMainThread:@selector(displayString:)with-Object:string waitUntilDone:NO]; [myArray removeObjectAt(0); }

  • while ([myArray count] > 0)
    {
        [self displayString: myArray[0]];        
        [myArray removeObjectAtIndex: 0];
    }
    
    [self performSelectorOnMainThread:@selector(displayString:) withObject:string waitUntilDone:YES];