Swift 如何在自定义类中使用presentViewController?

Swift 如何在自定义类中使用presentViewController?,swift,delegates,ios-multithreading,Swift,Delegates,Ios Multithreading,我只是更新了代码,但alertWindow不会显示。 我在Xcode中添加了断点,它显示viewDelegate为nil。 所有代表均为零。 这是我的代码: class LoginViewController:UIViewController,AlertDelegate { override func viewDidLoad() { super.viewDidLoad() let BackGroundImage:UIImageView = UIImageView(frame:

我只是更新了代码,但alertWindow不会显示。 我在Xcode中添加了断点,它显示
viewDelegate
为nil。 所有代表均为零。 这是我的代码:

class LoginViewController:UIViewController,AlertDelegate
{
override func viewDidLoad() {
    super.viewDidLoad()

    let BackGroundImage:UIImageView = UIImageView(frame: CGRectMake(0, 0, self.view.frame.width , self.view.frame.height))

    let image: UIImage = UIImage(named: "backgroundLogin.jpg")!

    BackGroundImage.image = image
    self.view.addSubview(BackGroundImage)
    //self.view.backgroundColor = UIColor(patternImage: UIImage(named: "backgroundLogin.jpg")!)

    username.text = "User name"
    password.text = "Password"
    usernameWarning.text = ""
    passwordWarning.text = ""

    self.view.bringSubviewToFront(username)
    self.view.bringSubviewToFront(password)
    self.view.bringSubviewToFront(usernameText)
    self.view.bringSubviewToFront(passwordText)
    self.view.bringSubviewToFront(LoginButton)
    self.view.bringSubviewToFront(RegisterButton)

    self.view.bringSubviewToFront(usernameWarning)
    self.view.bringSubviewToFront(passwordWarning)


}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    switch segue.identifier
    {


    case .Some("RegisterSegue"):
        let registerViewController = segue.destinationViewController as! RegisterViewController

        if let temp_register_username = usernameText!.text
        {
            registerViewController.register_name = temp_register_username
            if let temp_register_pass = passwordText!.text
            {
                registerViewController.register_password = temp_register_pass
            }
        }
    case .Some("loginSegue"):
        let loginViewController = segue.destinationViewController as! FunctionsViewController
        loginViewController.client = client



    default:
        super.prepareForSegue(segue, sender: sender)



    }
}


override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {
    if identifier == "loginSegue"
    {
        if usernameText.text != ""
        {
            if passwordText.text != ""
            {


                let encrypt = encryptMsg(send: passwordText.text!)

                let encrypt_pass = encrypt.encryptSendMsg()

                let sendMsg = AppConfig.AddHead("login", body: usernameText.text!+"|"+encrypt_pass)
                let (_,_) = client.connect(timeout: 1)
                let (success,_) = client.send(str: sendMsg)
                if success
                {
                    let data = client.read(1024*10)
                    if let d = data
                    {
                        if let str = String(bytes: d, encoding: NSUTF8StringEncoding)
                        {
                            if str[0...2] == AppConfig.TransmissionAgreementConfiguration["successLogin"]
                            {
                                AppConfig.StoreUserID(str)

                                let defaults = NSUserDefaults()

                                defaults.setObject(usernameText.text!, forKey: "userName")

                                let acceptThread = AcceptThread()
                                acceptThread.start()

                                return true
                            }
                            else if str[0...2] == AppConfig.TransmissionAgreementConfiguration["errLoginUsernameNotExist"]
                            {
                                usernameWarning.text = "User name doesn't exist"
                                usernameWarning.reloadInputViews()

                                passwordWarning.text = ""
                                passwordWarning.reloadInputViews()
                                return false

                            }
                            else if str[0...2] == AppConfig.TransmissionAgreementConfiguration["errLoginUsernameAlreadyOnline"]
                            {
                                usernameWarning.text = "User account already be online"
                                usernameWarning.reloadInputViews()

                                passwordWarning.text = ""
                                passwordWarning.reloadInputViews()
                                return false
                            }
                            else if str[0...2] == AppConfig.TransmissionAgreementConfiguration["errLoginPassword"]
                            {
                                usernameWarning.text = ""
                                usernameWarning.reloadInputViews()

                                passwordWarning.text = "Password Incorrect"
                                passwordWarning.reloadInputViews()
                                return false
                            }
                        }
                    }
                }

                return false

            }
            else
            {
                usernameWarning.text = ""
                usernameWarning.reloadInputViews()

                passwordWarning.text = "password cannot be empty"
                passwordWarning.reloadInputViews()
                return false
            }

        }
        else
        {
            usernameWarning.text = "username cannot be empty"
            usernameWarning.reloadInputViews()
            return false
        }
    }
    else
    {
        return true
    }

}

func presentWindow(title:String,msg:String)
{

    let alertController = UIAlertController(title: "\(title):", message: "\(msg)", preferredStyle: UIAlertControllerStyle.Alert)
    alertController.addTextFieldWithConfigurationHandler{
        (textField: UITextField!) -> Void in
        textField.placeholder = "Message"
    }

    let cancelAction = UIAlertAction(title: "Ignore", style: UIAlertActionStyle.Cancel, handler: nil)

    let okAction = UIAlertAction(title: "Reply", style: UIAlertActionStyle.Default,
        handler: {
            action in
            let reply_msg = alertController.textFields!.first! as UITextField
            print("I replies \(reply_msg)")

    })
    alertController.addAction(cancelAction)
    alertController.addAction(okAction)
    self.presentViewController(alertController, animated: true, completion: nil)

}
@IBAction func logoutUnwindSegue(segue: UIStoryboardSegue) {
    // Intentionally left blank
}

var client:TCPClient = TCPClient(addr:"localhost",port:8889)


var AppConfig=TransmissionAgreement(first:"test")
@IBOutlet weak var usernameWarning: UILabel!

@IBOutlet weak var passwordWarning: UILabel!

@IBOutlet weak var username: UILabel!
@IBOutlet weak var password: UILabel!

@IBOutlet weak var usernameText: UITextField!
@IBOutlet weak var passwordText: UITextField!

@IBOutlet weak var LoginButton: UIButton!

@IBOutlet weak var RegisterButton: UIButton!
}

class AcceptThread: NSThread {
override func main() {
    let server:TCPServer = TCPServer(addr:"127.0.0.1",port: 7000)

    let (success,_) = server.listen()
    if success
    {

        while !cancelled
        {
            if let my_client = server.accept()
            {

                let clientReadThread = ClientReadThread(client: my_client)
                clientReadThread.start()
                clientThreads.append(clientReadThread)
            }
        }

        for clientThread in clientThreads {
            clientThread.cancel()
        }
    }
}

var clientThreads = Array<ClientReadThread>()
var AppConfig=TransmissionAgreement(first:"test")
}

@objc protocol AlertDelegate: class {
func presentWindow(title:String,msg:String)
}

@objc protocol ClientReadThreadDelegate: class {
func clientReadThread(clientReadThread: ClientReadThread, didReceiveMessage message: String)

}


class ClientReadThread:NSThread{
init(client: TCPClient) {
    self.client = client

     super.init()
}




override func main() {
    while !cancelled, let readValue = client.read(1024*10) {
        if let message = String(bytes: readValue, encoding: NSUTF8StringEncoding) {

            let head = message[0...2]
         //   print("head is \(head)")


            if head! == AppConfig.TransmissionAgreementConfiguration["add"]
            {
                let defaults = NSUserDefaults()
                let myname = defaults.stringForKey("userName")


                    //store data
                    let context = CoreDataService.sharedCoreDataService.mainQueueContext
                    let friend = NSEntityDescription.insertNewObjectForNamedEntity(Friends.self, inManagedObjectContext: context)
                    friend.name = message.substringFromIndex(3)

                    try! context.save()

                    let sendMsg = AppConfig.AddClientHead("agreeAdd", body:myname)

                    let (_,_) = client.send(str:sendMsg)
                    dispatch_async(dispatch_get_main_queue(), { () -> Void in
                        self.delegate?.clientReadThread(self, didReceiveMessage: message)
                    })


            }
            else if head! == AppConfig.TransmissionAgreementConfiguration["chat"]
            {
                let search = message.substringFromIndex(3)
                 let resultController = try? catFriend.sharedCatFriendsService.catBlack(search)
                 try! resultController!.performFetch()

                 let flag = resultController?.sections?.count

                if flag <= 1//friend
                {

                    dispatch_async(dispatch_get_main_queue(), { () -> Void in

                        let client_info = message.split("|")
                        let client_name = client_info[1]

                        //self.alertDelegate?.presentWindow(client_name, msg: client_info[2])
                        self.viewDelegate?.presentWindow(client_name, msg: client_info[2])

                    })


                }
                else//black, not show the meg
                {
                    //do nothing
                }

            }

        }
    }
}

var AppConfig=TransmissionAgreement(first:"test")
let client: TCPClient
var viewDelegate:LoginViewController?
var delegate: ClientReadThreadDelegate?
var alertDelegate: AlertDelegate?
private var resultController: NSFetchedResultsController?
}
类LoginViewController:UIViewController,AlertDelegate
{
重写func viewDidLoad(){
super.viewDidLoad()
let BackGroundImage:UIImageView=UIImageView(帧:CGRectMake(0,0,self.view.frame.width,self.view.frame.height))
让image:UIImage=UIImage(名为:“backgroundLogin.jpg”)!
BackGroundImage.image=image
self.view.addSubview(背景图像)
//self.view.backgroundColor=UIColor(patternImage:UIImage(名为:“backgroundLogin.jpg”)!)
username.text=“用户名”
password.text=“password”
usernameWarning.text=“”
passwordWarning.text=“”
self.view.bringSubviewToFront(用户名)
self.view.bringSubviewToFront(密码)
self.view.bringSubviewToFront(用户名文本)
self.view.bringSubviewToFront(密码文本)
self.view.bringSubviewToFront(登录按钮)
self.view.bringSubviewToFront(注册表按钮)
self.view.bringSubviewToFront(用户名警告)
self.view.bringSubviewToFront(密码警告)
}
覆盖函数prepareforsgue(segue:UIStoryboardSegue,sender:AnyObject?){
开关序列标识符
{
案例部分(“注册者段”):
让registerViewController=segue.destinationViewController为!registerViewController
如果让临时注册用户名=usernameText!.text
{
registerViewController.register\u name=temp\u register\u用户名
如果让temp\u register\u pass=passwordText!.text
{
registerViewController.register\u password=temp\u register\u pass
}
}
案例部分(“登录格”):
让loginViewController=segue.destinationViewController作为!函数ViewController
loginViewController.client=客户端
违约:
super.prepareForSegue(segue,发送方:发送方)
}
}
重写func shouldPerformSegueWithIdentifier(标识符:字符串,发送方:AnyObject?)->Bool{
如果标识符==“loginSegue”
{
如果usernameText.text!“”
{
如果passwordText.text!“”
{
让encrypt=encryptMsg(发送:passwordText.text!)
让encrypt_pass=encrypt.encryptSendMsg()
让sendMsg=AppConfig.AddHead(“登录”,正文:usernameText.text!+“|”+加密传递)
let(,)=client.connect(超时:1)
let(success,u)=client.send(str:sendMsg)
如果成功
{
让data=client.read(1024*10)
如果设d=数据
{
如果let str=String(字节:d,编码:NSUTF8StringEncoding)
{
如果str[0…2]==AppConfig.TransmissionAgreementConfiguration[“successLogin”]
{
AppConfig.StoreUserID(str)
let defaults=NSUserDefaults()
defaults.setObject(usernameText.text!,forKey:“userName”)
让acceptThread=acceptThread()
acceptThread.start()
返回真值
}
如果str[0…2]==AppConfig.TransmissionAgreementConfiguration[“errLoginUsernameNotExist”]
{
usernameWarning.text=“用户名不存在”
usernameWarning.reloadInputViews()
passwordWarning.text=“”
passwordWarning.reloadInputViews()
返回错误
}
如果str[0…2]==AppConfig.TransmissionAgreementConfiguration[“errLoginUsernameAlreadyOnline”]
{
usernameWarning.text=“用户帐户已联机”
usernameWarning.reloadInputViews()
passwordWarning.text=“”
passwordWarning.reloadInputViews()
返回错误
}
如果str[0…2]==AppConfig.TransmissionAgreementConfiguration[“errLoginPassword”]
{
usernameWarning.text=“”
usernameWarning.reloadInputViews()
passwordWarning.text=“密码不正确”
passwordWarning.reloadInputViews()
返回错误
}
}
}
}
返回错误
}
其他的
{
usernameWarning.text=“”
usernameWarning.reloadInputViews()
passwordWarning.text=“密码不能为空”
passwordWarning.reloadInputViews()
返回错误
}
}
其他的
{
usernameWarning.text=“用户名不能为空”
usernameWarning.reloadInputViews()
返回错误
}
}
其他的
{
返回真值
}
}
func presentWindow(标题:字符串,消息:字符串)
{
让alertController=UIAlertController(标题:“\(标题):”,消息:“\(消息)”,首选样式:UIAlertControllerStyle.Alert)
alertController.addTextFieldWithConfigurationHandler{
(textField:UITextField!)->中的Void
textField.placeholder=“消息”
}
让cancelAction=UIAlertAction(标题:“忽略”,样式:UIAlertActionStyle.Cancel,处理程序:nil)
让okAction=UIAlertAction(标题
class MyViewController : UIViewController, AlertDelegate {
     private var clientReadThread: ClientReadThread?

     override viewDidLoad() {
          super.viewDidLoad();
          clientReadThread = ClientReadThread(someTcpClient)
          clientReadThread.viewDelegate = self
     }

     func presentWindow(title:String,msg:String) {
         // Your code goes here.
     }
}