Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.

Swift Web Service Boolean Değeri Alma

0 oy
571 kez görüntülendi
29, Haziran, 2016 ios development kategorisinde elifakay tarafından soruldu
30, Haziran, 2016 elifakay tarafından yeniden açıldı
Merhabalar,

Kullanıcı girişi yapan bir web servisim mevcut string olarak username ve password alıyor . Geri dönüş değeri boolean tipinde true false olarak bunu ios swiftte nasıl alabilirim true dönmesi gerekirken sürekli false olarak alıyor.

Kodlar bu şekilde : XML de userName ve Password gönderirken mi hata yapıyorum ??

    @IBOutlet weak var txtUserName : UITextField!
    @IBOutlet weak var txtPassword : UITextField!
    var mutableData:NSMutableData = NSMutableData.init()
    var currentElementName:NSString = ""

    @IBAction func actionLogin(sender : AnyObject) {

          guard let userName = txtUserName.text,let password=txtPassword.text where userName != "" && password !=""                                                else {    return    }

        let soapMessage = "<?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><Login xmlns='http://tempuri.org/'><Login><UserName>'\(userName)'</UserName><Password>'\(password)'</Password></Login></Login></soap:Body></soap:Envelope>"

        let urlString = "web service url si"
        let url = NSURL(string: urlString)
        let theRequest = NSMutableURLRequest(URL: url!)
        theRequest.addValue("text/xml; charset=utf-8″", forHTTPHeaderField: "Content-Type")
        theRequest.addValue("/(soapMessage.characters.count)", forHTTPHeaderField: "Content-Length")
        theRequest.HTTPMethod = "POST"
        theRequest.HTTPBody = soapMessage.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) // or false
        let connection = NSURLConnection(request: theRequest, delegate: self, startImmediately: true)
        connection!.start()

    }
    // NSURLConnectionDelegate
    // NSURL
    func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
        mutableData.length = 0;
    }

    func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
        mutableData.appendData(data)
    }
     func connectionDidFinishLoading(connection: NSURLConnection!) {
        let xmlParser = NSXMLParser(data: mutableData)
        xmlParser.delegate = self
        xmlParser.parse()
        xmlParser.shouldResolveExternalEntities = true
    }

    // NSXMLParserDelegate
    func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
        currentElementName = elementName
    }

    func parser(parser: NSXMLParser,foundCharacters string: String) {
          NSLog("Return : \n", string)
    }
}

2 Cevaplar

+2 oy
29, Haziran, 2016 huseyinvural tarafından cevaplandı
29, Haziran, 2016 huseyinvural tarafından düzenlendi

Çalıştığınız xml den, dönen iki adet itemi, bilgilerini değiştirerek paylaşırsanız, çok daha iyi yardımcı olabiliriz.

Ayrıca hatırlatma fayda var, http isteğinin başarılı bir şekilde tamamlandığından emin misiniz, parse etden önce breakpoint koyup gelen değeri kontrol ettiniz mi ?

İyi çalışmalar.

Dip Not: Allah rızası için herkez JSON kullansın, katletsinler artık şu XML i .

29, Haziran, 2016 huseyinvural tarafından yorumlandı
http://swiftstub.com/212706870

Yukarıdaki örneği kendinize uyarlayıp, print loglarının ekran görüntüsünü paylaşırmısınız.
30, Haziran, 2016 elifakay tarafından yorumlandı
Attığınız örnekle celcius bilgisini nerede web servise gönderiyor
30, Haziran, 2016 huseyinvural tarafından yorumlandı
Ben bu örnekte göndermedim, ama göndermiş olsaydım soap mesage içindeki ilgili tag arasında olacaktır, siz kendi örneğinizde olduğu şekilde burdaki  soap message kısmını güncelleyin, yalnız user ve pass değişkenlerinizi tanımlamayı unutmayın.

Size lazım olan input elemanlarını tanımlayıp, soap messageınızı gönderdikğinizde bir hata yoksa doğru sonuç alacaksınız. Yada nerde hata veriyor print loglarında göreceğiz.

Hatta soap mesage değikeninin altında da giden message yazdırın onada baklım bir sorun olacak mı.
30, Haziran, 2016 elifakay tarafından yorumlandı
30, Haziran, 2016 elifakay tarafından düzenlendi
https://www.dropbox.com/s/653ico8yxznv41y/IOSWebService.png?dl=0
linkinde bakabilirsiniz.

edit :  Web service kullanıcı giriş denemelerindeki hatalara baktım kullanıcı adı olarak ''Optional("asdf")'' gibi alıyor Optional ifadesinin gitmemesi lazım sadece "asdf" şeklinde almalı kullanıcı adını  o neden geliyor nasıl kaldırabilirim ??
30, Haziran, 2016 huseyinvural tarafından yorumlandı
30, Haziran, 2016 huseyinvural tarafından düzenlendi
Sayfayı yenilemediğimden görmemişim arkadaşım aşağıda açıklamış, ayrıca guard da kulanabilirsiniz.
0 oy
29, Haziran, 2016 ibolat tarafından cevaplandı
30, Haziran, 2016 elifakay tarafından seçilmiş
 
En İyi Cevap

Ek'teki projede ufak bir örnek var kendinize göre derleyip çalıştırırsanız sonuca ulaşacağınızı umuyorum.

29, Haziran, 2016 elifakay tarafından yorumlandı
yok sizin attığınız kaynak kod için teşekkür ederim fakat onda da aynı sonucu alıyorum false o zaman sanırım xml hata var.

https://www.dropbox.com/s/mer3k2n7hxbbr2x/Screen%20Shot%202016-06-29%20at%2013.47.39.png?dl=0

linkinde web service ekran görüntüsü vardır. Buna göre benim yazdığım xml hatam nerede??
29, Haziran, 2016 ibolat tarafından yorumlandı
web servise gönderdiğiniz herhangi kullanıcı adı ve şifre parametreleri her zaman true mi dönderiyor.
30, Haziran, 2016 elifakay tarafından yorumlandı
hayır her zaman false olarak geri dönüyor
30, Haziran, 2016 ibolat tarafından yorumlandı
Hayır ondan bahsetmiyorum bu web servisi kim yazdıysa kontrolü neye göre yapıyor her kullanıcı adı ve şifre geldiğinde false mu gönderiyor true mi şimdi hepsinde false gönderiyorsa belki senin programın çalışıyor ama servisten true cevabı almaya çalışıyorsun.
30, Haziran, 2016 elifakay tarafından yorumlandı
yok hayır kullanıcı tanımlı yada tanımsız şeklinde çalışıyor, kullanıcı adı ve şifre doğruysa true yanlışsa false zaten test ettim web service true döndürmesi gereken kullanıcı adı ve şifreyi kullanıyorum
30, Haziran, 2016 ibolat tarafından yorumlandı
soapUI kullanarak xml'i test ettiniz mi?
30, Haziran, 2016 elifakay tarafından yorumlandı
https://www.dropbox.com/s/653ico8yxznv41y/IOSWebService.png?dl=0
linkinde bakabilir misiniz soapMessage , Response ve geri dönüş değerini print ettim
Web service kullanıcı giriş denemelerindeki hatalarada baktım kullanıcı adı olarak ''Optional("asdf")'' gibi alıyor Optional ifadesinin gitmemesi lazım sadece "asdf" şeklinde almalı kullanıcı adını  o neden geliyor nasıl kaldırabilirim ??
30, Haziran, 2016 ibolat tarafından yorumlandı
evet optional olmaması lazım. şimdi oraya gelen değerleri nasıl alıyorsun ona bakmak lazım, tavsiyem 2 adet global değişken tanımla  var userName:String = ""   var password:String = ""  gibi daha sonra kullanıcı textfield ları doldurduktan sonra bu değişkenlere textfield'lardan gelen değerleri ata,
 örn: txtfieldUsername.text = userName
daha sonra bu global değişkenleri web servis xml içinde gerekli alana ekle  ......" + userName + "....... daha sonra olacaktır.
30, Haziran, 2016 elifakay tarafından yorumlandı
ibrahim bey çok teşekkür ederim hatam
var userName:String = ""
var password:String = "" değişkenleri let olarak tanımlamakmış şimdi düzgün bir login işlemi şeklinde çalışıyor sonunda true ifadesini görebildim.

İlgilenen tüm arkadaşlara teşekkür ederim..
30, Haziran, 2016 ibolat tarafından yorumlandı
Rica ederiz. Soruyu da cevaplandı seçerek kapatırsanız :)
...