2012-02-15 9 views
2

私はiPhone上でBluetoothのやりとりを調べています。さて、私は、転送できる唯一のオブジェクトがNSDataオブジェクトだと読んでいます。さて、私は私の "文字"オブジェクトを転送したいと思います。しかし、私はここで何をすべきかは非常にわからない、カスタムクラスのNSData?

@interface Character : NSObject <NSCoding> 
{ 
    UIImage *characterImage; 
    int health; 
    NSString *name; 
} 

-(void) initWithStats; 
-(void) addToViewController: (UIViewController *)theView; 

-(void) encodeWithCoder:(NSCoder *)encoder; 
-(void) initWithCoder:(NSCoder *)decoder; 

@end 

今、私はNSCodingプロトコルに準拠し、これらの2つの方法を実装する必要があることを知っている:クラスは次のようになります。 NSDataオブジェクトが他のデバイスによって受信されたときに、このクラスのインスタンスを作成してから「アンパックする」必要があることが分かります。

ここでのアドバイスは非常に高く評価されています。=)私はブルートゥープログラミングにとっては非常に新しいことがあります。事前に感謝して:)

/JBJ

答えて

4

それはあなたが本当にただ-encodeWithCoder:-initWithCoder:を実装する方法を求めているように聞こえます。それはかなり簡単です:

-(void) encodeWithCoder:(NSCoder *)encoder 
{ 
    [encoder encodeObject:characterImage forKey:@"character image"]; 
    [encoder encodeInt:health forKey:@"health"]; 
    [encoder encodeObject:name forKey:@"name"]; 
} 

それはすべてです。 -initWithCoder:は、補完方法(characterImage = [decoder decodeObjectForKey:@"character image"];など)を呼び出すことを除いて、まったく同じ方法で動作します。

アーカイブフォーマットをサポートしていないターゲットデバイスで動作するように特定のフォーマットでデータを提供する必要がある場合は、代わりに-encodeBytes:length:forKey:メソッドを使用してデータを保存したり、あなた自身のフォーマットをNSMutableDataオブジェクトに変換してから、-encodeObject:forKey:を使ってください。ターゲットデバイスは、エンコーダがエンベロープを格納しているエンベロープでデータを検索する必要があります。既知の一連のバイトから始めることで、これを簡単に行うことができます。私はそれがあなたの場合に必要かどうかは分かりませんが、心に留めておくべきことです。

+1

うわー、それは実際にはかなりまっすぐに聞こえます。したがって、このNSDataは実際には複数のオブジェクトをまとめて保持していますが、このNSDataオブジェクトはBluetooth経由で転送され、他のデバイスはNSDataオブジェクトを「アンパック」し、含まれているオブジェクトの作業を開始しますか?私はそれを得たか?おかげさまで再びチャプ。 – Seerex