2

RedPark Serial Cable for 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>

メッセージから x を抽出できるようにしたい (これは NSString として取り込まれます)。現時点では、NSRange を使用して、位置 4 (最初の x) の後と最後の "< /msg>" の前のすべてを抽出していますが、それが機能するとは確信していません。

最後に、これと一緒に実行されている NSThread があり、メッセージが NSMutableArray に追加されています。だから私が欲しいのは、ケーブルからメッセージを受信したときにNSThreadがメッセージ情報を操作/表示することです。私は次のようなものを持っています

//Thread method, 
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);
    }
}

上記の周りでクラッシュしていると思います... [self displayString:string] は、ラベルの値を設定するだけです。

-(void)displayString(NSString *string) {
 label.text = [string charAt(1)];
}

上記のコードは、Mac を自宅に置いて仕事をしているため、記憶からの抜粋です。任意の提案/ヘルプをいただければ幸いです

4

3 に答える 3

1
  1. You must not update UI on secondary thread.
  2. Mutable classes are not thread safe.

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

于 2013-07-19T09:06:43.127 に答える