Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.
0 oy
2.7k kez görüntülendi
ios development kategorisinde tarafından
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
tarafından
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 .

tarafından
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.
tarafından
Attığınız örnekle celcius bilgisini nerede web servise gönderiyor
tarafından
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ı.
tarafından
tarafından düzenlendi
+1
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 ??
tarafından
tarafından düzenlendi
Sayfayı yenilemediğimden görmemişim arkadaşım aşağıda açıklamış, ayrıca guard da kulanabilirsiniz.
0 oy
tarafından
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.

tarafından
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??
tarafından
web servise gönderdiğiniz herhangi kullanıcı adı ve şifre parametreleri her zaman true mi dönderiyor.
tarafından
hayır her zaman false olarak geri dönüyor
tarafından
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.
tarafından
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
tarafından
soapUI kullanarak xml'i test ettiniz mi?
tarafından
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 ??
tarafından
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.
tarafından
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..
tarafından
Rica ederiz. Soruyu da cevaplandı seçerek kapatırsanız :)
...