2012-01-10 6 views
1

私はWebサービスVIA SOAPと通信するアプリを持っています。今のところ、通信は厳密に文字列値などです。いくつかのクラスのこれらの値は、いくつかはありません。SOAPを介してクラスのインスタンスとインスタンスを転送するにはどうすればよいですか?

私の質問です:SOAPを介してクラスのインスタンスを渡すことは可能ですか?

構文などで何か.. .Mで

//class declaration in .h 
Myclass class 

class.string = @"stuff"; 
class.integer = 5; 

はその後

[NSString stringWithFormat:@"<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
<soap:Body> 
<stuff xmlns="http://website.com/"> 
    <class>%@</class> 
</stuff> 
</soap:Body> 
</soap:Envelope>,class]; 

がある限り、この可能性のようなものですSOAP文字列を作成しますWebサービスはそれをどのように処理するかを知っていますか?

+0

クラスの_instance_を転送しようとしていますか、まったく新しいクラスを定義しようとしていますか? –

+0

クラスのインスタンスを転送します。すべての保存された値とすべてを完了します。 –

答えて

1

クラスのインスタンスを転送するには、NSCodingプロトコルを調べます。

Archiving and Serializations Programming Guideには、質問する方法、具体的にはEncoding and Decoding Objectsの章があります。

+0

私はWebサービス側で何が行われているかについては何も制御していません。そのVBで書かれた私は信じています。私はそれを渡す場合、この情報を処理することができますか?または、オブジェクトをデコードするプロセスを経なければなりませんか? –

+0

VBはObjective-Cバイナリ(ehm、明らかに)を理解していません。オブジェクトをシリアライズする場合は、オブジェクトを格納してから目的のc側に戻したい場合にのみ有効です。サーバーに値を渡すつもりならば、悪い考えです。この場合、Objective-CからXMLを書くだけです。 – Jano

+0

VBがこの質問に関与するという要件はありませんでした。インスタンスがWebサービスによって格納されていると仮定しました。その場合はJSONまたはXMLを使用します。これらの形式の1つでオブジェクトの状態をエンコードし、VBでデコードします。 –

0

NSKeyedArchiverを使用します。

// serialize object to data with the given key 
+ (NSData*) archive:(id<NSCoding>)object key:(NSString*const)key { 
    NSMutableData *data = [[NSMutableData alloc] init]; 
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
    [archiver encodeObject:object forKey:key]; 
    [archiver finishEncoding]; 
    [archiver release]; 
    return [data autorelease]; 
} 

+ (id<NSCoding>) unarchiveKey:(NSString*const)key data:(NSData*)codedData{ 
    // unarchive 
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:codedData]; 
    id<NSCoding,NSObject> object = [unarchiver decodeObjectForKey:key]; 
    [unarchiver finishDecoding]; 
    [unarchiver release]; 
    return object; 
} 

、あなたはそのアイバーズためNSCodingを実装するためにシリアル化するために、オブジェクトを編集する必要があります。

#pragma mark - NSCoding 

- (void)encodeWithCoder:(NSCoder*)coder { 
    [super encodeWithCoder:coder]; 
    [coder encodeObject:self.myVar forKey:@"someArbitraryKey"]; 
    // ... other ivars 
} 

- (id)initWithCoder:(NSCoder*)coder { 
    self = [super initWithCoder:coder]; 
    if(self) { 
     self.myVar = [coder decodeObjectForKey:@"someArbitraryKey"]; 
     // ...other ivars 
    } 
    return self; 
} 

だから、アーカイブおよびアーカイブしないための2つのメソッドを作成し、シリアル化するためのオブジェクトでNSCodingを実装します。次に、NSDataとmake it Base64をSOAPに追加します。基本的には。私は何か、幸運をコンパイルしませんでした。ベンのリンクを読んでください。

関連する問題