Приложение для iPhone получает доступ к службе .net WCF и получает результаты в ярлыке - PullRequest
0 голосов
/ 21 апреля 2011

Я программист .Net и новичок в приложениях для iPhone и Obj C.

Мое требование следующее.

Мне нужно приложение для iPhone, которое использует метод в службе .net WCF и отображает результаты в виде метки или текстового поля в iPhone.

У меня есть wcf для умножения 2 чисел. Когда я делал NSLog, он получал там результаты. Но мне нужно только значение, т.е. я даю 5 * 10 и мне нужно 50 в моем лейбле. Вместо этого он дает все материал ..

Пожалуйста, найдите мой код здесь.

файл h

    #import <UIKit/UIKit.h>

@interface iServiceViewController : UIViewController {
       UILabel *label;
       NSMutableData *webData;
}
@property(nonatomic,retain) IBOutlet UILabel *label;
@end

файл m

#import "iServiceViewController.h"

@implementation iServiceViewController
@synthesize label;



// Implement viewDidLoad to do additional setup after loading the
view, typically from a nib.
- (void)viewDidLoad {
   [super viewDidLoad];
       NSString *soapMessage = [NSString stringWithFormat:
                                                        @"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
                                                        "<SOAP-ENV:Envelope \n"
                                                        "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" \n"
                                                        "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n"
                                                        "xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" \n"
                                                        "SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"
\n"
                                                        "xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"> \n"
                                                        "<SOAP-ENV:Body> \n"
                                                        "<GetProduct xmlns=\"http://tempuri.org/\">"
                                                        "<first>100</first><second>10</second>"
                                                        "</GetProduct>\n"
                                                        "</SOAP-ENV:Body> \n"
                                                        "</SOAP-ENV:Envelope>"];
       NSURL *url = [NSURL
URLWithString:@"http://192.168.0.115:1010/Service1.svc"];
   NSMutableURLRequest *theRequest = [NSMutableURLRequest
requestWithURL:url];
   NSString *msgLength = [NSString stringWithFormat:@"%d",
[soapMessage length]];
   [theRequest addValue: @"text/xml; charset=utf-8"
forHTTPHeaderField:@"Content-Type"];
   [theRequest addValue: @"http://tempuri.org/IService1/GetProduct"
forHTTPHeaderField:@"Soapaction"];
   [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
   [theRequest setHTTPMethod:@"POST"];
   [theRequest setHTTPBody: [soapMessage
dataUsingEncoding:NSUTF8StringEncoding]];
   NSURLConnection *theConnection = [[NSURLConnection alloc]
initWithRequest:theRequest delegate:self];

   if(theConnection) {
       webData = [[NSMutableData data] retain];
   }
   else {
       NSLog(@"theConnection is NULL");
       }
}

- (void)connection:(NSURLConnection *)connection
didReceiveResponse:(NSURLResponse *)response {
       [webData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
       [webData appendData:data];
}

- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error {
       label.text = [NSString stringWithFormat:@"Connection failed: %@",
[error description]];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
       [connection release];

       NSLog(@"Data has been loaded");

       //NSString *responseString = [[NSString alloc] initWithData:webData
encoding:NSUTF8StringEncoding];
       //NSInteger *responseInt = [[NSInteger alloc] initWithData:webData
encoding:NSInteger];
       NSString *responseString = [[NSString alloc] initWithData:webData
encoding:NSUTF8StringEncoding];
       [webData release];

       //label.text =  responseString;
       NSLog(responseString);

       [responseString release];

}

- (void)dealloc {
   [super dealloc];
}

@end

Мой вывод NSLOG

[Session started at 2011-04-21 12:04:48 +0300.]
2011-04-21 12:04:49.579 iService[1978:207] Data has been loaded
2011-04-21 12:04:49.580 iService[1978:207] <s:Envelope
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><GetProductResponse
xmlns="http://tempuri.org/"><GetProductResult>1000</GetProductResult></GetProductResponse></s:Body></s:Envelope>

-

Я попытался умножить 100 на 10, и я также получил результат. но как я могу напечатать только 1000 на моей этикетке или в любой торговой точке ..

Заранее спасибо ..

рэндзю

1 Ответ

0 голосов
/ 21 апреля 2011

Вам нужно сначала проанализировать этот xml. Но почему вы не отвечаете с сервера с помощью файла json {"value" = 1000}, а в вашем приложении для iphone делаете myLabel.text = [responseDict objectForKey:@"value"];

Для разбора json используйте sbjson

Редактировать:

Руководство по программированию на основе событий XML

Представляем JSON

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