Как я могу передать и экземпляр класса через SOAP? - PullRequest
1 голос
/ 11 января 2012

У меня есть приложение, которое связывается с веб-сервисом VIA SOAP.До сих пор сообщения имели строго строковые значения и тому подобное.Некоторые из этих значений в классах, некоторые нет.

Мой вопрос: возможно ли передать экземпляр класса через SOAP?

Что-то с синтаксисом типа ..

//class declaration in .h
 Myclass class

в .m

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

, затем создайте строку SOAP

[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];

Возможно ли что-то подобное, если веб-служба знает, как с этим справиться?

Ответы [ 2 ]

1 голос
/ 11 января 2012

Чтобы передать экземпляр класса, изучите протокол NSCoding .

Руководство по программированию Архивация и сериализация содержит несколько примеров того, как делать то, что выВы спрашиваете, в частности, Кодирование и декодирование объектов Глава.

0 голосов
/ 11 января 2012

Используйте 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 для его ivars:

#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;
}

Итак, создайте два метода для архивирования и разархивирования и внедрите NSCoding в объект для сериализации. Затем возьмите NSData и сделайте его Base64 , чтобы добавить его в SOAP. В основном это. Я ничего не собирал, удачи. Прочитайте ссылку Бена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...